@famgia/omnify-react 2.0.9 → 2.0.11

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.
@@ -315,9 +315,9 @@ function JapaneseNameField({
315
315
  }
316
316
 
317
317
  // src/components/JapaneseAddressField.tsx
318
- var import_react = require("react");
319
- var import_antd2 = require("antd");
320
318
  var import_icons = require("@ant-design/icons");
319
+ var import_antd2 = require("antd");
320
+ var import_react = require("react");
321
321
  var import_jsx_runtime2 = require("react/jsx-runtime");
322
322
  function getLabel2(i18n, field, locale) {
323
323
  return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.["en"] ?? field;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/index.ts","../../src/components/JapaneseNameField.tsx","../../src/lib/zod-i18n.ts","../../src/lib/form-validation.ts","../../src/components/JapaneseAddressField.tsx","../../src/components/JapaneseBankField.tsx"],"sourcesContent":["/**\n * @famgia/omnify-react/components\n *\n * React components for Japanese form fields\n */\n\nexport {\n JapaneseNameField,\n type JapaneseNameFieldProps,\n type I18nConfig,\n} from './JapaneseNameField';\n\nexport {\n JapaneseAddressField,\n type JapaneseAddressFieldProps,\n type PostalLookupResult,\n type SelectOption,\n} from './JapaneseAddressField';\n\nexport {\n JapaneseBankField,\n type JapaneseBankFieldProps,\n type SelectOption as BankSelectOption,\n} from './JapaneseBankField';\n","/**\n * JapaneseNameField - Japanese name input component\n * Handles lastname + firstname with optional kana fields\n *\n * @example\n * ```tsx\n * import { JapaneseNameField } from '@famgia/omnify-react/components';\n *\n * <JapaneseNameField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"name\"\n * showKana={true}\n * />\n * ```\n */\nimport { Form, Input, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface JapaneseNameFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'name') */\n prefix?: string;\n /** Override required status */\n required?: boolean;\n /** Show kana fields (default: true) */\n showKana?: boolean;\n /** Custom label for name fields */\n label?: string;\n /** Custom label for kana fields */\n kanaLabel?: string;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getCompoundLabel(i18n: I18nConfig, prefix: string, locale: string): string | undefined {\n // Try to get compound-level label (e.g., 'name' -> '氏名')\n return i18n.fields[prefix]?.label?.[locale] ?? i18n.fields[prefix]?.label?.['en'];\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseNameField({\n schemas,\n i18n,\n prefix = 'name',\n required = false,\n showKana = true,\n label,\n kanaLabel,\n}: JapaneseNameFieldProps) {\n const locale = getZodLocale();\n\n const lastnameField = `${prefix}_lastname`;\n const firstnameField = `${prefix}_firstname`;\n const kanaLastnameField = `${prefix}_kana_lastname`;\n const kanaFirstnameField = `${prefix}_kana_firstname`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isFieldRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const nameRequired = isFieldRequired(lastnameField) || isFieldRequired(firstnameField) || required;\n const kanaRequired = isFieldRequired(kanaLastnameField) || isFieldRequired(kanaFirstnameField);\n\n // Try compound label first, then fallback to first field's label\n const nameLabel = label ?? getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, lastnameField, locale);\n const nameKanaLabel =\n kanaLabel ??\n `${getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, kanaLastnameField, locale)}(カナ)`;\n\n // Get short field labels (姓, 名, etc.)\n const lastnameShortLabel = locale === 'ja' ? '姓' : 'Last';\n const firstnameShortLabel = locale === 'ja' ? '名' : 'First';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n <Form.Item label={nameLabel} required={nameRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item name={lastnameField} rules={getRule(lastnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, lastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item name={firstnameField} rules={getRule(firstnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, firstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {showKana && (\n <Form.Item label={nameKanaLabel} required={kanaRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n name={kanaLastnameField}\n rules={getRule(kanaLastnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaLastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n name={kanaFirstnameField}\n rules={getRule(kanaFirstnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaFirstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n )}\n </>\n );\n}\n","/**\n * Zod i18n - Localization for Zod validation messages\n *\n * This module provides locale-aware validation messages for Zod schemas.\n * It works independently of generated schemas and can be configured at runtime.\n *\n * @example\n * ```typescript\n * import { setZodLocale, getZodMessage } from '@famgia/omnify-react/lib';\n *\n * // Set locale once at app level\n * setZodLocale('ja');\n *\n * // Get translated message\n * const msg = getZodMessage('required', { displayName: 'Email' });\n * ```\n */\n\n// Default validation messages for all supported locales\nconst DEFAULT_MESSAGES: Record<string, Record<string, string>> = {\n required: {\n en: '${displayName} is required',\n ja: '${displayName}は必須です',\n vi: '${displayName} là bắt buộc',\n ko: '${displayName}은(는) 필수입니다',\n 'zh-CN': '${displayName}是必填项',\n 'zh-TW': '${displayName}為必填欄位',\n th: '${displayName} จำเป็นต้องกรอก',\n es: '${displayName} es obligatorio',\n },\n minLength: {\n en: '${displayName} must be at least ${min} characters',\n ja: '${displayName}は${min}文字以上で入力してください',\n vi: '${displayName} phải có ít nhất ${min} ký tự',\n ko: '${displayName}은(는) ${min}자 이상이어야 합니다',\n 'zh-CN': '${displayName}至少需要${min}个字符',\n 'zh-TW': '${displayName}至少需要${min}個字元',\n th: '${displayName} ต้องมีอย่างน้อย ${min} ตัวอักษร',\n es: '${displayName} debe tener al menos ${min} caracteres',\n },\n maxLength: {\n en: '${displayName} must be at most ${max} characters',\n ja: '${displayName}は${max}文字以内で入力してください',\n vi: '${displayName} không được quá ${max} ký tự',\n ko: '${displayName}은(는) ${max}자 이하여야 합니다',\n 'zh-CN': '${displayName}最多${max}个字符',\n 'zh-TW': '${displayName}最多${max}個字元',\n th: '${displayName} ต้องไม่เกิน ${max} ตัวอักษร',\n es: '${displayName} debe tener como máximo ${max} caracteres',\n },\n min: {\n en: '${displayName} must be at least ${min}',\n ja: '${displayName}は${min}以上で入力してください',\n vi: '${displayName} phải lớn hơn hoặc bằng ${min}',\n ko: '${displayName}은(는) ${min} 이상이어야 합니다',\n 'zh-CN': '${displayName}必须大于等于${min}',\n 'zh-TW': '${displayName}必須大於等於${min}',\n th: '${displayName} ต้องมากกว่าหรือเท่ากับ ${min}',\n es: '${displayName} debe ser al menos ${min}',\n },\n max: {\n en: '${displayName} must be at most ${max}',\n ja: '${displayName}は${max}以下で入力してください',\n vi: '${displayName} phải nhỏ hơn hoặc bằng ${max}',\n ko: '${displayName}은(는) ${max} 이하여야 합니다',\n 'zh-CN': '${displayName}必须小于等于${max}',\n 'zh-TW': '${displayName}必須小於等於${max}',\n th: '${displayName} ต้องน้อยกว่าหรือเท่ากับ ${max}',\n es: '${displayName} debe ser como máximo ${max}',\n },\n email: {\n en: 'Please enter a valid email address',\n ja: '有効なメールアドレスを入力してください',\n vi: 'Vui lòng nhập địa chỉ email hợp lệ',\n ko: '유효한 이메일 주소를 입력하세요',\n 'zh-CN': '请输入有效的电子邮件地址',\n 'zh-TW': '請輸入有效的電子郵件地址',\n th: 'กรุณากรอกอีเมลที่ถูกต้อง',\n es: 'Por favor, introduce una dirección de correo electrónico válida',\n },\n url: {\n en: 'Please enter a valid URL',\n ja: '有効なURLを入力してください',\n vi: 'Vui lòng nhập URL hợp lệ',\n ko: '유효한 URL을 입력하세요',\n 'zh-CN': '请输入有效的URL',\n 'zh-TW': '請輸入有效的網址',\n th: 'กรุณากรอก URL ที่ถูกต้อง',\n es: 'Por favor, introduce una URL válida',\n },\n pattern: {\n en: '${displayName} format is invalid',\n ja: '${displayName}の形式が正しくありません',\n vi: '${displayName} không đúng định dạng',\n ko: '${displayName} 형식이 올바르지 않습니다',\n 'zh-CN': '${displayName}格式不正确',\n 'zh-TW': '${displayName}格式不正確',\n th: 'รูปแบบ${displayName}ไม่ถูกต้อง',\n es: 'El formato de ${displayName} no es válido',\n },\n};\n\n// State\nlet currentLocale = 'ja';\nlet fallbackLocale = 'en';\nlet customMessages: Record<string, Record<string, string>> = {};\n\n/**\n * Reset all settings to defaults (for testing)\n * @internal\n */\nexport function resetZodI18n(): void {\n currentLocale = 'ja';\n fallbackLocale = 'en';\n customMessages = {};\n}\n\n/**\n * Set current locale for Zod validation messages\n */\nexport function setZodLocale(locale: string): void {\n currentLocale = locale;\n}\n\n/**\n * Get current locale\n */\nexport function getZodLocale(): string {\n return currentLocale;\n}\n\n/**\n * Set fallback locale (used when message not found in current locale)\n */\nexport function setZodFallbackLocale(locale: string): void {\n fallbackLocale = locale;\n}\n\n/**\n * Get fallback locale\n */\nexport function getZodFallbackLocale(): string {\n return fallbackLocale;\n}\n\n/**\n * Add custom validation messages\n * @param messages - Object with message keys and locale values\n */\nexport function addZodMessages(messages: Record<string, Record<string, string>>): void {\n for (const [key, locales] of Object.entries(messages)) {\n customMessages[key] = { ...customMessages[key], ...locales };\n }\n}\n\n/**\n * Get translated validation message\n *\n * @param key - Message key (e.g., 'required', 'minLength')\n * @param params - Template parameters to replace\n * @returns Formatted message string\n *\n * @example\n * getZodMessage('required', { displayName: '氏名' })\n * // => '氏名は必須です'\n */\nexport function getZodMessage(\n key: string,\n params: Record<string, string | number> = {}\n): string {\n // Try custom messages first, then defaults\n const messages = customMessages[key] ?? DEFAULT_MESSAGES[key];\n if (!messages) return key;\n\n let message =\n messages[currentLocale] ??\n messages[fallbackLocale] ??\n messages['en'] ??\n key;\n\n // Replace template placeholders\n for (const [param, value] of Object.entries(params)) {\n message = message.replace(new RegExp(`\\\\$\\\\{${param}\\\\}`, 'g'), String(value));\n }\n\n return message;\n}\n\n/**\n * Get all messages for a specific locale\n */\nexport function getZodMessages(locale?: string): Record<string, string> {\n const targetLocale = locale ?? currentLocale;\n const result: Record<string, string> = {};\n\n // Start with defaults\n for (const [key, locales] of Object.entries(DEFAULT_MESSAGES)) {\n result[key] = locales[targetLocale] ?? locales[fallbackLocale] ?? locales['en'] ?? key;\n }\n\n // Override with custom\n for (const [key, locales] of Object.entries(customMessages)) {\n if (locales[targetLocale]) {\n result[key] = locales[targetLocale];\n }\n }\n\n return result;\n}\n","/**\n * Form validation utilities for Ant Design + Zod\n *\n * Compatible with Zod v3.x and v4.x\n *\n * @example\n * ```typescript\n * import { zodRule, requiredRule } from '@famgia/omnify-react/lib';\n *\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n * ```\n */\n\nimport type { RuleObject } from 'antd/es/form';\nimport type { z } from 'zod';\nimport { getZodMessage } from './zod-i18n';\n\n/**\n * Convert Zod schema to Ant Design Form rule with i18n support\n *\n * @example\n * // Set locale once at component level\n * setZodLocale('ja');\n *\n * // Use without passing locale\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function zodRule<T extends z.ZodTypeAny>(\n schema: T,\n displayName?: string\n): RuleObject {\n const field = displayName ?? 'この項目';\n\n return {\n validator: async (_, value) => {\n // 空チェック - 必須として扱う\n if (value === undefined || value === null || value === '') {\n if (schema.safeParse(undefined).success) return;\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n const result = schema.safeParse(value);\n if (result.success) return;\n\n // 最初のZodエラーを取得\n const issue = result.error.issues[0];\n if (!issue) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n // エラータイプに基づいて翻訳(Zod v3/v4対応)\n const issueAny = issue as unknown as Record<string, unknown>;\n switch (issue.code) {\n case 'too_small': {\n const origin = issueAny.origin as string | undefined;\n const minimum = issueAny.minimum as number;\n if (origin === 'string' && minimum === 1) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n if (origin === 'string') {\n throw new Error(getZodMessage('minLength', { displayName: field, min: minimum }));\n }\n throw new Error(getZodMessage('min', { displayName: field, min: minimum }));\n }\n\n case 'too_big': {\n const origin = issueAny.origin as string | undefined;\n const maximum = issueAny.maximum as number;\n if (origin === 'string') {\n throw new Error(getZodMessage('maxLength', { displayName: field, max: maximum }));\n }\n throw new Error(getZodMessage('max', { displayName: field, max: maximum }));\n }\n\n // Zod v4: 'invalid_string' → 'invalid_format'\n case 'invalid_format': {\n const format = issueAny.format as string | undefined;\n if (format === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (format === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (format === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n break;\n }\n\n // Zod v3: 'invalid_string' (handled via default case for forward compatibility)\n default: {\n // Zod v3 compatibility: handle invalid_string code\n if ((issue.code as string) === 'invalid_string') {\n const validation = issueAny.validation as string | undefined;\n if (validation === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (validation === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (validation === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n }\n break;\n }\n\n case 'invalid_type': {\n const expected = issueAny.expected as string | undefined;\n if (expected && value === undefined) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n break;\n }\n }\n\n // フォールバック: Zodのオリジナルメッセージを使用\n throw new Error(issue.message);\n },\n };\n}\n\n/**\n * Create required rule with i18n message\n *\n * @example\n * <Form.Item\n * name=\"name\"\n * rules={[requiredRule('名前')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function requiredRule(displayName: string): RuleObject {\n return {\n required: true,\n message: getZodMessage('required', { displayName }),\n };\n}\n\n/**\n * Check if a Zod schema represents a required field\n */\nexport function isZodRequired(schema: z.ZodTypeAny): boolean {\n const schemaDesc = (schema as any)?._def?.typeName;\n const inner = (schema as any)?._def?.innerType;\n\n if (schemaDesc === 'ZodOptional' || schemaDesc === 'ZodNullable') return false;\n if (inner?._def?.typeName === 'ZodOptional' || inner?._def?.typeName === 'ZodNullable') return false;\n\n return true;\n}\n","/**\n * JapaneseAddressField - Japanese address input component\n * Handles postal code, prefecture, address fields with postal code lookup\n *\n * @example\n * ```tsx\n * import { JapaneseAddressField } from '@famgia/omnify-react/components';\n *\n * <JapaneseAddressField\n * form={form}\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"address\"\n * prefectureOptions={prefectureOptions}\n * />\n * ```\n */\nimport { useState, useCallback } from 'react';\nimport { Form, Input, Select, Button, message } from 'antd';\nimport { SearchOutlined, LoadingOutlined } from '@ant-design/icons';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface PostalLookupResult {\n prefecture?: string;\n prefectureCode?: string;\n prefectureName?: string;\n address1?: string;\n address2?: string;\n}\n\nexport interface JapaneseAddressFieldProps {\n /** Ant Design form instance */\n form: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'address') */\n prefix?: string;\n /** Use prefecture ID instead of code (default: false) */\n usePrefectureId?: boolean;\n /** Prefecture options for select. If not provided, a simple input is shown */\n prefectureOptions?: SelectOption[];\n /** Enable postal code lookup (default: true) */\n enablePostalLookup?: boolean;\n /** Show search button (default: true) */\n showSearchButton?: boolean;\n /** Auto search when postal code is complete (default: true) */\n autoSearch?: boolean;\n /** Custom postal lookup function */\n onPostalLookup?: (postalCode: string) => Promise<PostalLookupResult | null>;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\n// Default postal lookup function using zipcloud API\nasync function lookupPostalCode(postalCode: string): Promise<PostalLookupResult | null> {\n try {\n const response = await fetch(`https://zipcloud.ibsnet.co.jp/api/search?zipcode=${postalCode}`);\n const data = await response.json();\n\n if (data.results && data.results.length > 0) {\n const result = data.results[0];\n return {\n prefectureCode: result.prefcode,\n prefectureName: result.address1,\n address1: result.address2,\n address2: result.address3,\n };\n }\n return null;\n } catch (error) {\n console.error('Postal code lookup failed:', error);\n return null;\n }\n}\n\n// Localized messages\nconst MESSAGES = {\n ja: {\n searchAddress: '住所検索',\n searching: '検索中...',\n notFound: '郵便番号が見つかりませんでした',\n error: '住所検索に失敗しました',\n invalidFormat: '郵便番号の形式が正しくありません(例:123-4567)',\n },\n en: {\n searchAddress: 'Search Address',\n searching: 'Searching...',\n notFound: 'Postal code not found',\n error: 'Address lookup failed',\n invalidFormat: 'Invalid postal code format (e.g., 123-4567)',\n },\n vi: {\n searchAddress: 'Tìm địa chỉ',\n searching: 'Đang tìm...',\n notFound: 'Không tìm thấy mã bưu điện',\n error: 'Tìm địa chỉ thất bại',\n invalidFormat: 'Định dạng mã bưu điện không hợp lệ (VD: 123-4567)',\n },\n} as const;\n\nfunction getMessage(key: keyof (typeof MESSAGES)['ja'], locale: string): string {\n return (MESSAGES as any)[locale]?.[key] ?? MESSAGES.ja[key];\n}\n\nexport function JapaneseAddressField({\n form,\n schemas,\n i18n,\n prefix = 'address',\n usePrefectureId = false,\n prefectureOptions,\n enablePostalLookup = true,\n showSearchButton = true,\n autoSearch = true,\n onPostalLookup,\n}: JapaneseAddressFieldProps) {\n const locale = getZodLocale();\n const [isSearching, setIsSearching] = useState(false);\n\n // Field names\n const postalCodeField = `${prefix}_postal_code`;\n const prefectureField = usePrefectureId ? `${prefix}_prefecture_id` : `${prefix}_prefecture`;\n const address1Field = `${prefix}_address1`;\n const address2Field = `${prefix}_address2`;\n const address3Field = `${prefix}_address3`;\n\n // Get rules from schemas\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema description\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n // Lookup address from postal code\n const doLookup = useCallback(\n async (postalCode: string) => {\n const digits = postalCode.replace(/[^0-9]/g, '');\n if (digits.length !== 7) {\n message.warning(getMessage('invalidFormat', locale));\n return;\n }\n\n setIsSearching(true);\n try {\n const lookupFn = onPostalLookup ?? lookupPostalCode;\n const result = await lookupFn(postalCode);\n\n if (result) {\n const prefectureValue = usePrefectureId ? result.prefectureCode : result.prefecture;\n form.setFieldsValue({\n [prefectureField]: prefectureValue,\n [address1Field]: result.address1,\n [address2Field]: result.address2,\n });\n } else {\n message.info(getMessage('notFound', locale));\n }\n } catch (error) {\n message.error(getMessage('error', locale));\n console.error('Postal code lookup failed:', error);\n } finally {\n setIsSearching(false);\n }\n },\n [form, locale, onPostalLookup, prefectureField, address1Field, address2Field, usePrefectureId]\n );\n\n const handlePostalCodeChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const postalCode = e.target.value.replace(/[^0-9]/g, '');\n if (autoSearch && enablePostalLookup && postalCode.length === 7) {\n await doLookup(postalCode);\n }\n };\n\n const handleSearchClick = async () => {\n const postalCode = form.getFieldValue(postalCodeField);\n if (postalCode) {\n await doLookup(postalCode);\n }\n };\n\n return (\n <>\n {/* 郵便番号 */}\n <Form.Item\n name={postalCodeField}\n label={getLabel(i18n, postalCodeField, locale)}\n rules={getRule(postalCodeField)}\n required={isRequired(postalCodeField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, postalCodeField, locale)}\n style={{ width: enablePostalLookup && showSearchButton ? 'calc(100% - 110px)' : 150 }}\n onChange={handlePostalCodeChange}\n addonAfter={\n enablePostalLookup &&\n showSearchButton && (\n <Button\n type=\"text\"\n size=\"small\"\n icon={isSearching ? <LoadingOutlined /> : <SearchOutlined />}\n onClick={handleSearchClick}\n disabled={isSearching}\n >\n {getMessage('searchAddress', locale)}\n </Button>\n )\n }\n />\n </Form.Item>\n\n {/* 都道府県 */}\n <Form.Item\n name={prefectureField}\n label={getLabel(i18n, prefectureField, locale)}\n rules={getRule(prefectureField)}\n required={isRequired(prefectureField)}\n >\n {prefectureOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n options={prefectureOptions}\n style={{ width: 200 }}\n showSearch\n optionFilterProp=\"label\"\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n style={{ width: 200 }}\n />\n )}\n </Form.Item>\n\n {/* 市区町村 */}\n <Form.Item\n name={address1Field}\n label={getLabel(i18n, address1Field, locale)}\n rules={getRule(address1Field)}\n required={isRequired(address1Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address1Field, locale)} />\n </Form.Item>\n\n {/* 番地 */}\n <Form.Item\n name={address2Field}\n label={getLabel(i18n, address2Field, locale)}\n rules={getRule(address2Field)}\n required={isRequired(address2Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address2Field, locale)} />\n </Form.Item>\n\n {/* 建物名・部屋番号 */}\n <Form.Item\n name={address3Field}\n label={getLabel(i18n, address3Field, locale)}\n rules={getRule(address3Field)}\n required={isRequired(address3Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address3Field, locale)} />\n </Form.Item>\n </>\n );\n}\n","/**\n * JapaneseBankField - Japanese bank account input component\n *\n * @example\n * ```tsx\n * import { JapaneseBankField } from '@famgia/omnify-react/components';\n *\n * <JapaneseBankField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"bank\"\n * accountTypeOptions={accountTypeOptions}\n * />\n * ```\n */\nimport { Form, Input, Select, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface JapaneseBankFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'bank') */\n prefix?: string;\n /** Account type options. If not provided, a simple input is shown */\n accountTypeOptions?: SelectOption[];\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseBankField({\n schemas,\n i18n,\n prefix = 'bank',\n accountTypeOptions,\n}: JapaneseBankFieldProps) {\n const locale = getZodLocale();\n\n const bankCodeField = `${prefix}_bank_code`;\n const bankNameField = `${prefix}_bank_name`;\n const branchCodeField = `${prefix}_branch_code`;\n const branchNameField = `${prefix}_branch_name`;\n const accountTypeField = `${prefix}_account_type`;\n const accountNumberField = `${prefix}_account_number`;\n const accountHolderField = `${prefix}_account_holder`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const bankRequired = isRequired(bankCodeField) || isRequired(bankNameField);\n const branchRequired = isRequired(branchCodeField) || isRequired(branchNameField);\n\n // Short labels\n const codeShortLabel = locale === 'ja' ? 'コード' : 'Code';\n const nameShortLabel = locale === 'ja' ? '名称' : 'Name';\n\n const bankLabel = locale === 'ja' ? '銀行' : 'Bank';\n const branchLabel = locale === 'ja' ? '支店' : 'Branch';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n {/* 銀行コード・銀行名 */}\n <Form.Item label={bankLabel} required={bankRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item name={bankCodeField} rules={getRule(bankCodeField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankCodeField, locale)}\n maxLength={4}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item name={bankNameField} rules={getRule(bankNameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 支店コード・支店名 */}\n <Form.Item label={branchLabel} required={branchRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item\n name={branchCodeField}\n rules={getRule(branchCodeField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchCodeField, locale)}\n maxLength={3}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item\n name={branchNameField}\n rules={getRule(branchNameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 口座種別 */}\n <Form.Item\n name={accountTypeField}\n label={getLabel(i18n, accountTypeField, locale)}\n rules={getRule(accountTypeField)}\n required={isRequired(accountTypeField)}\n >\n {accountTypeOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n options={accountTypeOptions}\n style={{ width: 150 }}\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n style={{ width: 150 }}\n />\n )}\n </Form.Item>\n\n {/* 口座番号 */}\n <Form.Item\n name={accountNumberField}\n label={getLabel(i18n, accountNumberField, locale)}\n rules={getRule(accountNumberField)}\n required={isRequired(accountNumberField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, accountNumberField, locale)}\n maxLength={7}\n style={{ width: 150 }}\n />\n </Form.Item>\n\n {/* 口座名義 */}\n <Form.Item\n name={accountHolderField}\n label={getLabel(i18n, accountHolderField, locale)}\n rules={getRule(accountHolderField)}\n required={isRequired(accountHolderField)}\n >\n <Input placeholder={getPlaceholder(i18n, accountHolderField, locale)} />\n </Form.Item>\n </>\n );\n}\n"],"mappings":"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","names":["message","import_antd","import_jsx_runtime","getLabel","getPlaceholder","import_antd","import_jsx_runtime","getLabel","getPlaceholder"]}
1
+ {"version":3,"sources":["../../src/components/index.ts","../../src/components/JapaneseNameField.tsx","../../src/lib/zod-i18n.ts","../../src/lib/form-validation.ts","../../src/components/JapaneseAddressField.tsx","../../src/components/JapaneseBankField.tsx"],"sourcesContent":["/**\n * @famgia/omnify-react/components\n *\n * React components for Japanese form fields\n */\n\nexport {\n JapaneseNameField,\n type JapaneseNameFieldProps,\n type I18nConfig,\n} from './JapaneseNameField';\n\nexport {\n JapaneseAddressField,\n type JapaneseAddressFieldProps,\n type PostalLookupResult,\n type SelectOption,\n} from './JapaneseAddressField';\n\nexport {\n JapaneseBankField,\n type JapaneseBankFieldProps,\n type SelectOption as BankSelectOption,\n} from './JapaneseBankField';\n","/**\n * JapaneseNameField - Japanese name input component\n * Handles lastname + firstname with optional kana fields\n *\n * @example\n * ```tsx\n * import { JapaneseNameField } from '@famgia/omnify-react/components';\n *\n * <JapaneseNameField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"name\"\n * showKana={true}\n * />\n * ```\n */\nimport { Form, Input, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface JapaneseNameFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'name') */\n prefix?: string;\n /** Override required status */\n required?: boolean;\n /** Show kana fields (default: true) */\n showKana?: boolean;\n /** Custom label for name fields */\n label?: string;\n /** Custom label for kana fields */\n kanaLabel?: string;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getCompoundLabel(i18n: I18nConfig, prefix: string, locale: string): string | undefined {\n // Try to get compound-level label (e.g., 'name' -> '氏名')\n return i18n.fields[prefix]?.label?.[locale] ?? i18n.fields[prefix]?.label?.['en'];\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseNameField({\n schemas,\n i18n,\n prefix = 'name',\n required = false,\n showKana = true,\n label,\n kanaLabel,\n}: JapaneseNameFieldProps) {\n const locale = getZodLocale();\n\n const lastnameField = `${prefix}_lastname`;\n const firstnameField = `${prefix}_firstname`;\n const kanaLastnameField = `${prefix}_kana_lastname`;\n const kanaFirstnameField = `${prefix}_kana_firstname`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isFieldRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const nameRequired = isFieldRequired(lastnameField) || isFieldRequired(firstnameField) || required;\n const kanaRequired = isFieldRequired(kanaLastnameField) || isFieldRequired(kanaFirstnameField);\n\n // Try compound label first, then fallback to first field's label\n const nameLabel = label ?? getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, lastnameField, locale);\n const nameKanaLabel =\n kanaLabel ??\n `${getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, kanaLastnameField, locale)}(カナ)`;\n\n // Get short field labels (姓, 名, etc.)\n const lastnameShortLabel = locale === 'ja' ? '姓' : 'Last';\n const firstnameShortLabel = locale === 'ja' ? '名' : 'First';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n <Form.Item label={nameLabel} required={nameRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item name={lastnameField} rules={getRule(lastnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, lastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item name={firstnameField} rules={getRule(firstnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, firstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {showKana && (\n <Form.Item label={nameKanaLabel} required={kanaRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n name={kanaLastnameField}\n rules={getRule(kanaLastnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaLastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n name={kanaFirstnameField}\n rules={getRule(kanaFirstnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaFirstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n )}\n </>\n );\n}\n","/**\n * Zod i18n - Localization for Zod validation messages\n *\n * This module provides locale-aware validation messages for Zod schemas.\n * It works independently of generated schemas and can be configured at runtime.\n *\n * @example\n * ```typescript\n * import { setZodLocale, getZodMessage } from '@famgia/omnify-react/lib';\n *\n * // Set locale once at app level\n * setZodLocale('ja');\n *\n * // Get translated message\n * const msg = getZodMessage('required', { displayName: 'Email' });\n * ```\n */\n\n// Default validation messages for all supported locales\nconst DEFAULT_MESSAGES: Record<string, Record<string, string>> = {\n required: {\n en: '${displayName} is required',\n ja: '${displayName}は必須です',\n vi: '${displayName} là bắt buộc',\n ko: '${displayName}은(는) 필수입니다',\n 'zh-CN': '${displayName}是必填项',\n 'zh-TW': '${displayName}為必填欄位',\n th: '${displayName} จำเป็นต้องกรอก',\n es: '${displayName} es obligatorio',\n },\n minLength: {\n en: '${displayName} must be at least ${min} characters',\n ja: '${displayName}は${min}文字以上で入力してください',\n vi: '${displayName} phải có ít nhất ${min} ký tự',\n ko: '${displayName}은(는) ${min}자 이상이어야 합니다',\n 'zh-CN': '${displayName}至少需要${min}个字符',\n 'zh-TW': '${displayName}至少需要${min}個字元',\n th: '${displayName} ต้องมีอย่างน้อย ${min} ตัวอักษร',\n es: '${displayName} debe tener al menos ${min} caracteres',\n },\n maxLength: {\n en: '${displayName} must be at most ${max} characters',\n ja: '${displayName}は${max}文字以内で入力してください',\n vi: '${displayName} không được quá ${max} ký tự',\n ko: '${displayName}은(는) ${max}자 이하여야 합니다',\n 'zh-CN': '${displayName}最多${max}个字符',\n 'zh-TW': '${displayName}最多${max}個字元',\n th: '${displayName} ต้องไม่เกิน ${max} ตัวอักษร',\n es: '${displayName} debe tener como máximo ${max} caracteres',\n },\n min: {\n en: '${displayName} must be at least ${min}',\n ja: '${displayName}は${min}以上で入力してください',\n vi: '${displayName} phải lớn hơn hoặc bằng ${min}',\n ko: '${displayName}은(는) ${min} 이상이어야 합니다',\n 'zh-CN': '${displayName}必须大于等于${min}',\n 'zh-TW': '${displayName}必須大於等於${min}',\n th: '${displayName} ต้องมากกว่าหรือเท่ากับ ${min}',\n es: '${displayName} debe ser al menos ${min}',\n },\n max: {\n en: '${displayName} must be at most ${max}',\n ja: '${displayName}は${max}以下で入力してください',\n vi: '${displayName} phải nhỏ hơn hoặc bằng ${max}',\n ko: '${displayName}은(는) ${max} 이하여야 합니다',\n 'zh-CN': '${displayName}必须小于等于${max}',\n 'zh-TW': '${displayName}必須小於等於${max}',\n th: '${displayName} ต้องน้อยกว่าหรือเท่ากับ ${max}',\n es: '${displayName} debe ser como máximo ${max}',\n },\n email: {\n en: 'Please enter a valid email address',\n ja: '有効なメールアドレスを入力してください',\n vi: 'Vui lòng nhập địa chỉ email hợp lệ',\n ko: '유효한 이메일 주소를 입력하세요',\n 'zh-CN': '请输入有效的电子邮件地址',\n 'zh-TW': '請輸入有效的電子郵件地址',\n th: 'กรุณากรอกอีเมลที่ถูกต้อง',\n es: 'Por favor, introduce una dirección de correo electrónico válida',\n },\n url: {\n en: 'Please enter a valid URL',\n ja: '有効なURLを入力してください',\n vi: 'Vui lòng nhập URL hợp lệ',\n ko: '유효한 URL을 입력하세요',\n 'zh-CN': '请输入有效的URL',\n 'zh-TW': '請輸入有效的網址',\n th: 'กรุณากรอก URL ที่ถูกต้อง',\n es: 'Por favor, introduce una URL válida',\n },\n pattern: {\n en: '${displayName} format is invalid',\n ja: '${displayName}の形式が正しくありません',\n vi: '${displayName} không đúng định dạng',\n ko: '${displayName} 형식이 올바르지 않습니다',\n 'zh-CN': '${displayName}格式不正确',\n 'zh-TW': '${displayName}格式不正確',\n th: 'รูปแบบ${displayName}ไม่ถูกต้อง',\n es: 'El formato de ${displayName} no es válido',\n },\n};\n\n// State\nlet currentLocale = 'ja';\nlet fallbackLocale = 'en';\nlet customMessages: Record<string, Record<string, string>> = {};\n\n/**\n * Reset all settings to defaults (for testing)\n * @internal\n */\nexport function resetZodI18n(): void {\n currentLocale = 'ja';\n fallbackLocale = 'en';\n customMessages = {};\n}\n\n/**\n * Set current locale for Zod validation messages\n */\nexport function setZodLocale(locale: string): void {\n currentLocale = locale;\n}\n\n/**\n * Get current locale\n */\nexport function getZodLocale(): string {\n return currentLocale;\n}\n\n/**\n * Set fallback locale (used when message not found in current locale)\n */\nexport function setZodFallbackLocale(locale: string): void {\n fallbackLocale = locale;\n}\n\n/**\n * Get fallback locale\n */\nexport function getZodFallbackLocale(): string {\n return fallbackLocale;\n}\n\n/**\n * Add custom validation messages\n * @param messages - Object with message keys and locale values\n */\nexport function addZodMessages(messages: Record<string, Record<string, string>>): void {\n for (const [key, locales] of Object.entries(messages)) {\n customMessages[key] = { ...customMessages[key], ...locales };\n }\n}\n\n/**\n * Get translated validation message\n *\n * @param key - Message key (e.g., 'required', 'minLength')\n * @param params - Template parameters to replace\n * @returns Formatted message string\n *\n * @example\n * getZodMessage('required', { displayName: '氏名' })\n * // => '氏名は必須です'\n */\nexport function getZodMessage(\n key: string,\n params: Record<string, string | number> = {}\n): string {\n // Try custom messages first, then defaults\n const messages = customMessages[key] ?? DEFAULT_MESSAGES[key];\n if (!messages) return key;\n\n let message =\n messages[currentLocale] ??\n messages[fallbackLocale] ??\n messages['en'] ??\n key;\n\n // Replace template placeholders\n for (const [param, value] of Object.entries(params)) {\n message = message.replace(new RegExp(`\\\\$\\\\{${param}\\\\}`, 'g'), String(value));\n }\n\n return message;\n}\n\n/**\n * Get all messages for a specific locale\n */\nexport function getZodMessages(locale?: string): Record<string, string> {\n const targetLocale = locale ?? currentLocale;\n const result: Record<string, string> = {};\n\n // Start with defaults\n for (const [key, locales] of Object.entries(DEFAULT_MESSAGES)) {\n result[key] = locales[targetLocale] ?? locales[fallbackLocale] ?? locales['en'] ?? key;\n }\n\n // Override with custom\n for (const [key, locales] of Object.entries(customMessages)) {\n if (locales[targetLocale]) {\n result[key] = locales[targetLocale];\n }\n }\n\n return result;\n}\n","/**\n * Form validation utilities for Ant Design + Zod\n *\n * Compatible with Zod v3.x and v4.x\n *\n * @example\n * ```typescript\n * import { zodRule, requiredRule } from '@famgia/omnify-react/lib';\n *\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n * ```\n */\n\nimport type { RuleObject } from 'antd/es/form';\nimport type { z } from 'zod';\nimport { getZodMessage } from './zod-i18n';\n\n/**\n * Convert Zod schema to Ant Design Form rule with i18n support\n *\n * @example\n * // Set locale once at component level\n * setZodLocale('ja');\n *\n * // Use without passing locale\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function zodRule<T extends z.ZodTypeAny>(\n schema: T,\n displayName?: string\n): RuleObject {\n const field = displayName ?? 'この項目';\n\n return {\n validator: async (_, value) => {\n // 空チェック - 必須として扱う\n if (value === undefined || value === null || value === '') {\n if (schema.safeParse(undefined).success) return;\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n const result = schema.safeParse(value);\n if (result.success) return;\n\n // 最初のZodエラーを取得\n const issue = result.error.issues[0];\n if (!issue) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n // エラータイプに基づいて翻訳(Zod v3/v4対応)\n const issueAny = issue as unknown as Record<string, unknown>;\n switch (issue.code) {\n case 'too_small': {\n const origin = issueAny.origin as string | undefined;\n const minimum = issueAny.minimum as number;\n if (origin === 'string' && minimum === 1) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n if (origin === 'string') {\n throw new Error(getZodMessage('minLength', { displayName: field, min: minimum }));\n }\n throw new Error(getZodMessage('min', { displayName: field, min: minimum }));\n }\n\n case 'too_big': {\n const origin = issueAny.origin as string | undefined;\n const maximum = issueAny.maximum as number;\n if (origin === 'string') {\n throw new Error(getZodMessage('maxLength', { displayName: field, max: maximum }));\n }\n throw new Error(getZodMessage('max', { displayName: field, max: maximum }));\n }\n\n // Zod v4: 'invalid_string' → 'invalid_format'\n case 'invalid_format': {\n const format = issueAny.format as string | undefined;\n if (format === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (format === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (format === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n break;\n }\n\n // Zod v3: 'invalid_string' (handled via default case for forward compatibility)\n default: {\n // Zod v3 compatibility: handle invalid_string code\n if ((issue.code as string) === 'invalid_string') {\n const validation = issueAny.validation as string | undefined;\n if (validation === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (validation === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (validation === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n }\n break;\n }\n\n case 'invalid_type': {\n const expected = issueAny.expected as string | undefined;\n if (expected && value === undefined) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n break;\n }\n }\n\n // フォールバック: Zodのオリジナルメッセージを使用\n throw new Error(issue.message);\n },\n };\n}\n\n/**\n * Create required rule with i18n message\n *\n * @example\n * <Form.Item\n * name=\"name\"\n * rules={[requiredRule('名前')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function requiredRule(displayName: string): RuleObject {\n return {\n required: true,\n message: getZodMessage('required', { displayName }),\n };\n}\n\n/**\n * Check if a Zod schema represents a required field\n */\nexport function isZodRequired(schema: z.ZodTypeAny): boolean {\n const schemaDesc = (schema as any)?._def?.typeName;\n const inner = (schema as any)?._def?.innerType;\n\n if (schemaDesc === 'ZodOptional' || schemaDesc === 'ZodNullable') return false;\n if (inner?._def?.typeName === 'ZodOptional' || inner?._def?.typeName === 'ZodNullable') return false;\n\n return true;\n}\n","/**\n * JapaneseAddressField - Japanese address input component\n * Handles postal code, prefecture, address fields with postal code lookup\n *\n * @example\n * ```tsx\n * import { JapaneseAddressField } from '@famgia/omnify-react/components';\n *\n * <JapaneseAddressField\n * form={form}\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"address\"\n * prefectureOptions={prefectureOptions}\n * />\n * ```\n */\nimport { SearchOutlined, LoadingOutlined } from '@ant-design/icons';\nimport { Form, Input, Select, Button, message } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { useState, useCallback } from 'react';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface PostalLookupResult {\n prefecture?: string;\n prefectureCode?: string;\n prefectureName?: string;\n address1?: string;\n address2?: string;\n}\n\nexport interface JapaneseAddressFieldProps {\n /** Ant Design form instance */\n form: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'address') */\n prefix?: string;\n /** Use prefecture ID instead of code (default: false) */\n usePrefectureId?: boolean;\n /** Prefecture options for select. If not provided, a simple input is shown */\n prefectureOptions?: SelectOption[];\n /** Enable postal code lookup (default: true) */\n enablePostalLookup?: boolean;\n /** Show search button (default: true) */\n showSearchButton?: boolean;\n /** Auto search when postal code is complete (default: true) */\n autoSearch?: boolean;\n /** Custom postal lookup function */\n onPostalLookup?: (postalCode: string) => Promise<PostalLookupResult | null>;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\n// Default postal lookup function using zipcloud API\nasync function lookupPostalCode(postalCode: string): Promise<PostalLookupResult | null> {\n try {\n const response = await fetch(`https://zipcloud.ibsnet.co.jp/api/search?zipcode=${postalCode}`);\n const data = await response.json();\n\n if (data.results && data.results.length > 0) {\n const result = data.results[0];\n return {\n prefectureCode: result.prefcode,\n prefectureName: result.address1,\n address1: result.address2,\n address2: result.address3,\n };\n }\n return null;\n } catch (error) {\n console.error('Postal code lookup failed:', error);\n return null;\n }\n}\n\n// Localized messages\nconst MESSAGES = {\n ja: {\n searchAddress: '住所検索',\n searching: '検索中...',\n notFound: '郵便番号が見つかりませんでした',\n error: '住所検索に失敗しました',\n invalidFormat: '郵便番号の形式が正しくありません(例:123-4567)',\n },\n en: {\n searchAddress: 'Search Address',\n searching: 'Searching...',\n notFound: 'Postal code not found',\n error: 'Address lookup failed',\n invalidFormat: 'Invalid postal code format (e.g., 123-4567)',\n },\n vi: {\n searchAddress: 'Tìm địa chỉ',\n searching: 'Đang tìm...',\n notFound: 'Không tìm thấy mã bưu điện',\n error: 'Tìm địa chỉ thất bại',\n invalidFormat: 'Định dạng mã bưu điện không hợp lệ (VD: 123-4567)',\n },\n} as const;\n\nfunction getMessage(key: keyof (typeof MESSAGES)['ja'], locale: string): string {\n return (MESSAGES as any)[locale]?.[key] ?? MESSAGES.ja[key];\n}\n\nexport function JapaneseAddressField({\n form,\n schemas,\n i18n,\n prefix = 'address',\n usePrefectureId = false,\n prefectureOptions,\n enablePostalLookup = true,\n showSearchButton = true,\n autoSearch = true,\n onPostalLookup,\n}: JapaneseAddressFieldProps) {\n const locale = getZodLocale();\n const [isSearching, setIsSearching] = useState(false);\n\n // Field names\n const postalCodeField = `${prefix}_postal_code`;\n const prefectureField = usePrefectureId ? `${prefix}_prefecture_id` : `${prefix}_prefecture`;\n const address1Field = `${prefix}_address1`;\n const address2Field = `${prefix}_address2`;\n const address3Field = `${prefix}_address3`;\n\n // Get rules from schemas\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema description\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n // Lookup address from postal code\n const doLookup = useCallback(\n async (postalCode: string) => {\n const digits = postalCode.replace(/[^0-9]/g, '');\n if (digits.length !== 7) {\n message.warning(getMessage('invalidFormat', locale));\n return;\n }\n\n setIsSearching(true);\n try {\n const lookupFn = onPostalLookup ?? lookupPostalCode;\n const result = await lookupFn(postalCode);\n\n if (result) {\n const prefectureValue = usePrefectureId ? result.prefectureCode : result.prefecture;\n form.setFieldsValue({\n [prefectureField]: prefectureValue,\n [address1Field]: result.address1,\n [address2Field]: result.address2,\n });\n } else {\n message.info(getMessage('notFound', locale));\n }\n } catch (error) {\n message.error(getMessage('error', locale));\n console.error('Postal code lookup failed:', error);\n } finally {\n setIsSearching(false);\n }\n },\n [form, locale, onPostalLookup, prefectureField, address1Field, address2Field, usePrefectureId]\n );\n\n const handlePostalCodeChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const postalCode = e.target.value.replace(/[^0-9]/g, '');\n if (autoSearch && enablePostalLookup && postalCode.length === 7) {\n await doLookup(postalCode);\n }\n };\n\n const handleSearchClick = async () => {\n const postalCode = form.getFieldValue(postalCodeField);\n if (postalCode) {\n await doLookup(postalCode);\n }\n };\n\n return (\n <>\n {/* 郵便番号 */}\n <Form.Item\n name={postalCodeField}\n label={getLabel(i18n, postalCodeField, locale)}\n rules={getRule(postalCodeField)}\n required={isRequired(postalCodeField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, postalCodeField, locale)}\n style={{ width: enablePostalLookup && showSearchButton ? 'calc(100% - 110px)' : 150 }}\n onChange={handlePostalCodeChange}\n addonAfter={\n enablePostalLookup &&\n showSearchButton && (\n <Button\n type=\"text\"\n size=\"small\"\n icon={isSearching ? <LoadingOutlined /> : <SearchOutlined />}\n onClick={handleSearchClick}\n disabled={isSearching}\n >\n {getMessage('searchAddress', locale)}\n </Button>\n )\n }\n />\n </Form.Item>\n\n {/* 都道府県 */}\n <Form.Item\n name={prefectureField}\n label={getLabel(i18n, prefectureField, locale)}\n rules={getRule(prefectureField)}\n required={isRequired(prefectureField)}\n >\n {prefectureOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n options={prefectureOptions}\n style={{ width: 200 }}\n showSearch\n optionFilterProp=\"label\"\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n style={{ width: 200 }}\n />\n )}\n </Form.Item>\n\n {/* 市区町村 */}\n <Form.Item\n name={address1Field}\n label={getLabel(i18n, address1Field, locale)}\n rules={getRule(address1Field)}\n required={isRequired(address1Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address1Field, locale)} />\n </Form.Item>\n\n {/* 番地 */}\n <Form.Item\n name={address2Field}\n label={getLabel(i18n, address2Field, locale)}\n rules={getRule(address2Field)}\n required={isRequired(address2Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address2Field, locale)} />\n </Form.Item>\n\n {/* 建物名・部屋番号 */}\n <Form.Item\n name={address3Field}\n label={getLabel(i18n, address3Field, locale)}\n rules={getRule(address3Field)}\n required={isRequired(address3Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address3Field, locale)} />\n </Form.Item>\n </>\n );\n}\n","/**\n * JapaneseBankField - Japanese bank account input component\n *\n * @example\n * ```tsx\n * import { JapaneseBankField } from '@famgia/omnify-react/components';\n *\n * <JapaneseBankField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"bank\"\n * accountTypeOptions={accountTypeOptions}\n * />\n * ```\n */\nimport { Form, Input, Select, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface JapaneseBankFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'bank') */\n prefix?: string;\n /** Account type options. If not provided, a simple input is shown */\n accountTypeOptions?: SelectOption[];\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseBankField({\n schemas,\n i18n,\n prefix = 'bank',\n accountTypeOptions,\n}: JapaneseBankFieldProps) {\n const locale = getZodLocale();\n\n const bankCodeField = `${prefix}_bank_code`;\n const bankNameField = `${prefix}_bank_name`;\n const branchCodeField = `${prefix}_branch_code`;\n const branchNameField = `${prefix}_branch_name`;\n const accountTypeField = `${prefix}_account_type`;\n const accountNumberField = `${prefix}_account_number`;\n const accountHolderField = `${prefix}_account_holder`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const bankRequired = isRequired(bankCodeField) || isRequired(bankNameField);\n const branchRequired = isRequired(branchCodeField) || isRequired(branchNameField);\n\n // Short labels\n const codeShortLabel = locale === 'ja' ? 'コード' : 'Code';\n const nameShortLabel = locale === 'ja' ? '名称' : 'Name';\n\n const bankLabel = locale === 'ja' ? '銀行' : 'Bank';\n const branchLabel = locale === 'ja' ? '支店' : 'Branch';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n {/* 銀行コード・銀行名 */}\n <Form.Item label={bankLabel} required={bankRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item name={bankCodeField} rules={getRule(bankCodeField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankCodeField, locale)}\n maxLength={4}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item name={bankNameField} rules={getRule(bankNameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 支店コード・支店名 */}\n <Form.Item label={branchLabel} required={branchRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item\n name={branchCodeField}\n rules={getRule(branchCodeField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchCodeField, locale)}\n maxLength={3}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item\n name={branchNameField}\n rules={getRule(branchNameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 口座種別 */}\n <Form.Item\n name={accountTypeField}\n label={getLabel(i18n, accountTypeField, locale)}\n rules={getRule(accountTypeField)}\n required={isRequired(accountTypeField)}\n >\n {accountTypeOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n options={accountTypeOptions}\n style={{ width: 150 }}\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n style={{ width: 150 }}\n />\n )}\n </Form.Item>\n\n {/* 口座番号 */}\n <Form.Item\n name={accountNumberField}\n label={getLabel(i18n, accountNumberField, locale)}\n rules={getRule(accountNumberField)}\n required={isRequired(accountNumberField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, accountNumberField, locale)}\n maxLength={7}\n style={{ width: 150 }}\n />\n </Form.Item>\n\n {/* 口座名義 */}\n <Form.Item\n name={accountHolderField}\n label={getLabel(i18n, accountHolderField, locale)}\n rules={getRule(accountHolderField)}\n required={isRequired(accountHolderField)}\n >\n <Input placeholder={getPlaceholder(i18n, accountHolderField, locale)} />\n </Form.Item>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACgBA,kBAAsC;;;ACGtC,IAAM,mBAA2D;AAAA,EAC/D,UAAU;AAAA,IACR,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAGA,IAAI,gBAAgB;AACpB,IAAI,iBAAiB;AACrB,IAAI,iBAAyD,CAAC;AAsBvD,SAAS,eAAuB;AACrC,SAAO;AACT;AAqCO,SAAS,cACd,KACA,SAA0C,CAAC,GACnC;AAER,QAAM,WAAW,eAAe,GAAG,KAAK,iBAAiB,GAAG;AAC5D,MAAI,CAAC,SAAU,QAAO;AAEtB,MAAIA,WACF,SAAS,aAAa,KACtB,SAAS,cAAc,KACvB,SAAS,IAAI,KACb;AAGF,aAAW,CAAC,OAAO,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACnD,IAAAA,WAAUA,SAAQ,QAAQ,IAAI,OAAO,SAAS,KAAK,OAAO,GAAG,GAAG,OAAO,KAAK,CAAC;AAAA,EAC/E;AAEA,SAAOA;AACT;;;ACrJO,SAAS,QACd,QACA,aACY;AACZ,QAAM,QAAQ,eAAe;AAE7B,SAAO;AAAA,IACL,WAAW,OAAO,GAAG,UAAU;AAE7B,UAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD,YAAI,OAAO,UAAU,MAAS,EAAE,QAAS;AACzC,cAAM,IAAI,MAAM,cAAc,YAAY,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,MACnE;AAEA,YAAM,SAAS,OAAO,UAAU,KAAK;AACrC,UAAI,OAAO,QAAS;AAGpB,YAAM,QAAQ,OAAO,MAAM,OAAO,CAAC;AACnC,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,cAAc,YAAY,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,MACnE;AAGA,YAAM,WAAW;AACjB,cAAQ,MAAM,MAAM;AAAA,QAClB,KAAK,aAAa;AAChB,gBAAM,SAAS,SAAS;AACxB,gBAAM,UAAU,SAAS;AACzB,cAAI,WAAW,YAAY,YAAY,GAAG;AACxC,kBAAM,IAAI,MAAM,cAAc,YAAY,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,UACnE;AACA,cAAI,WAAW,UAAU;AACvB,kBAAM,IAAI,MAAM,cAAc,aAAa,EAAE,aAAa,OAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,UAClF;AACA,gBAAM,IAAI,MAAM,cAAc,OAAO,EAAE,aAAa,OAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,QAC5E;AAAA,QAEA,KAAK,WAAW;AACd,gBAAM,SAAS,SAAS;AACxB,gBAAM,UAAU,SAAS;AACzB,cAAI,WAAW,UAAU;AACvB,kBAAM,IAAI,MAAM,cAAc,aAAa,EAAE,aAAa,OAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,UAClF;AACA,gBAAM,IAAI,MAAM,cAAc,OAAO,EAAE,aAAa,OAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,QAC5E;AAAA;AAAA,QAGA,KAAK,kBAAkB;AACrB,gBAAM,SAAS,SAAS;AACxB,cAAI,WAAW,SAAS;AACtB,kBAAM,IAAI,MAAM,cAAc,SAAS,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,UAChE;AACA,cAAI,WAAW,OAAO;AACpB,kBAAM,IAAI,MAAM,cAAc,OAAO,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,UAC9D;AACA,cAAI,WAAW,SAAS;AACtB,kBAAM,IAAI,MAAM,cAAc,WAAW,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,UAClE;AACA;AAAA,QACF;AAAA;AAAA,QAGA,SAAS;AAEP,cAAK,MAAM,SAAoB,kBAAkB;AAC/C,kBAAM,aAAa,SAAS;AAC5B,gBAAI,eAAe,SAAS;AAC1B,oBAAM,IAAI,MAAM,cAAc,SAAS,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,YAChE;AACA,gBAAI,eAAe,OAAO;AACxB,oBAAM,IAAI,MAAM,cAAc,OAAO,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,YAC9D;AACA,gBAAI,eAAe,SAAS;AAC1B,oBAAM,IAAI,MAAM,cAAc,WAAW,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,YAClE;AAAA,UACF;AACA;AAAA,QACF;AAAA,QAEA,KAAK,gBAAgB;AACnB,gBAAM,WAAW,SAAS;AAC1B,cAAI,YAAY,UAAU,QAAW;AACnC,kBAAM,IAAI,MAAM,cAAc,YAAY,EAAE,aAAa,MAAM,CAAC,CAAC;AAAA,UACnE;AACA;AAAA,QACF;AAAA,MACF;AAGA,YAAM,IAAI,MAAM,MAAM,OAAO;AAAA,IAC/B;AAAA,EACF;AACF;AAuBO,SAAS,cAAc,QAA+B;AAC3D,QAAM,aAAc,QAAgB,MAAM;AAC1C,QAAM,QAAS,QAAgB,MAAM;AAErC,MAAI,eAAe,iBAAiB,eAAe,cAAe,QAAO;AACzE,MAAI,OAAO,MAAM,aAAa,iBAAiB,OAAO,MAAM,aAAa,cAAe,QAAO;AAE/F,SAAO;AACT;;;AFpDI;AAhEJ,SAAS,SAAS,MAAkB,OAAe,QAAwB;AACzE,SAAO,KAAK,OAAO,KAAK,GAAG,QAAQ,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG,QAAQ,IAAI,KAAK;AACrF;AAEA,SAAS,iBAAiB,MAAkB,QAAgB,QAAoC;AAE9F,SAAO,KAAK,OAAO,MAAM,GAAG,QAAQ,MAAM,KAAK,KAAK,OAAO,MAAM,GAAG,QAAQ,IAAI;AAClF;AAEA,SAAS,eAAe,MAAkB,OAAe,QAAwB;AAC/E,SAAO,KAAK,OAAO,KAAK,GAAG,cAAc,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG,cAAc,IAAI,KAAK;AACjG;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,SAAS,aAAa;AAE5B,QAAM,gBAAgB,GAAG,MAAM;AAC/B,QAAM,iBAAiB,GAAG,MAAM;AAChC,QAAM,oBAAoB,GAAG,MAAM;AACnC,QAAM,qBAAqB,GAAG,MAAM;AAEpC,QAAM,UAAU,CAAC,UAAgC;AAC/C,UAAM,SAAS,QAAQ,KAAK;AAC5B,QAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,WAAO,CAAC,QAAQ,QAAe,SAAS,MAAM,OAAO,MAAM,CAAC,CAAC;AAAA,EAC/D;AAGA,QAAM,kBAAkB,CAAC,UAA2B;AAClD,UAAM,SAAS,QAAQ,KAAK;AAC5B,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,cAAc,MAAa;AAAA,EACpC;AAEA,QAAM,eAAe,gBAAgB,aAAa,KAAK,gBAAgB,cAAc,KAAK;AAC1F,QAAM,eAAe,gBAAgB,iBAAiB,KAAK,gBAAgB,kBAAkB;AAG7F,QAAM,YAAY,SAAS,iBAAiB,MAAM,QAAQ,MAAM,KAAK,SAAS,MAAM,eAAe,MAAM;AACzG,QAAM,gBACJ,aACA,GAAG,iBAAiB,MAAM,QAAQ,MAAM,KAAK,SAAS,MAAM,mBAAmB,MAAM,CAAC;AAGxF,QAAM,qBAAqB,WAAW,OAAO,WAAM;AACnD,QAAM,sBAAsB,WAAW,OAAO,WAAM;AAEpD,QAAM,cAAmC;AAAA,IACvC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAEA,SACE,4EACE;AAAA,gDAAC,iBAAK,MAAL,EAAU,OAAO,WAAW,UAAU,cAAc,OAAO,EAAE,cAAc,EAAE,GAC5E,uDAAC,mBAAI,QAAQ,GACX;AAAA,kDAAC,mBAAI,MAAM,IACT,sDAAC,iBAAK,MAAL,EAAU,MAAM,eAAe,OAAO,QAAQ,aAAa,GAAG,OAAO,EAAE,cAAc,GAAG,GACvF;AAAA,QAAC;AAAA;AAAA,UACC,QAAQ,4CAAC,UAAK,OAAO,aAAc,8BAAmB;AAAA,UACtD,aAAa,eAAe,MAAM,eAAe,MAAM;AAAA;AAAA,MACzD,GACF,GACF;AAAA,MACA,4CAAC,mBAAI,MAAM,IACT,sDAAC,iBAAK,MAAL,EAAU,MAAM,gBAAgB,OAAO,QAAQ,cAAc,GAAG,OAAO,EAAE,cAAc,GAAG,GACzF;AAAA,QAAC;AAAA;AAAA,UACC,QAAQ,4CAAC,UAAK,OAAO,aAAc,+BAAoB;AAAA,UACvD,aAAa,eAAe,MAAM,gBAAgB,MAAM;AAAA;AAAA,MAC1D,GACF,GACF;AAAA,OACF,GACF;AAAA,IAEC,YACC,4CAAC,iBAAK,MAAL,EAAU,OAAO,eAAe,UAAU,cAAc,OAAO,EAAE,cAAc,EAAE,GAChF,uDAAC,mBAAI,QAAQ,GACX;AAAA,kDAAC,mBAAI,MAAM,IACT;AAAA,QAAC,iBAAK;AAAA,QAAL;AAAA,UACC,MAAM;AAAA,UACN,OAAO,QAAQ,iBAAiB;AAAA,UAChC,OAAO,EAAE,cAAc,GAAG;AAAA,UAE1B;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,4CAAC,UAAK,OAAO,aAAc,8BAAmB;AAAA,cACtD,aAAa,eAAe,MAAM,mBAAmB,MAAM;AAAA;AAAA,UAC7D;AAAA;AAAA,MACF,GACF;AAAA,MACA,4CAAC,mBAAI,MAAM,IACT;AAAA,QAAC,iBAAK;AAAA,QAAL;AAAA,UACC,MAAM;AAAA,UACN,OAAO,QAAQ,kBAAkB;AAAA,UACjC,OAAO,EAAE,cAAc,GAAG;AAAA,UAE1B;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,4CAAC,UAAK,OAAO,aAAc,+BAAoB;AAAA,cACvD,aAAa,eAAe,MAAM,oBAAoB,MAAM;AAAA;AAAA,UAC9D;AAAA;AAAA,MACF,GACF;AAAA,OACF,GACF;AAAA,KAEJ;AAEJ;;;AGlJA,mBAAgD;AAChD,IAAAC,eAAqD;AAGrD,mBAAsC;AA4LlC,IAAAC,sBAAA;AAhJJ,SAASC,UAAS,MAAkB,OAAe,QAAwB;AACzE,SAAO,KAAK,OAAO,KAAK,GAAG,QAAQ,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG,QAAQ,IAAI,KAAK;AACrF;AAEA,SAASC,gBAAe,MAAkB,OAAe,QAAwB;AAC/E,SAAO,KAAK,OAAO,KAAK,GAAG,cAAc,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG,cAAc,IAAI,KAAK;AACjG;AAGA,eAAe,iBAAiB,YAAwD;AACtF,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,oDAAoD,UAAU,EAAE;AAC7F,UAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,QAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,YAAM,SAAS,KAAK,QAAQ,CAAC;AAC7B,aAAO;AAAA,QACL,gBAAgB,OAAO;AAAA,QACvB,gBAAgB,OAAO;AAAA,QACvB,UAAU,OAAO;AAAA,QACjB,UAAU,OAAO;AAAA,MACnB;AAAA,IACF;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,8BAA8B,KAAK;AACjD,WAAO;AAAA,EACT;AACF;AAGA,IAAM,WAAW;AAAA,EACf,IAAI;AAAA,IACF,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,eAAe;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,eAAe;AAAA,EACjB;AAAA,EACA,IAAI;AAAA,IACF,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,eAAe;AAAA,EACjB;AACF;AAEA,SAAS,WAAW,KAAoC,QAAwB;AAC9E,SAAQ,SAAiB,MAAM,IAAI,GAAG,KAAK,SAAS,GAAG,GAAG;AAC5D;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB;AAAA,EACA,qBAAqB;AAAA,EACrB,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb;AACF,GAA8B;AAC5B,QAAM,SAAS,aAAa;AAC5B,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAS,KAAK;AAGpD,QAAM,kBAAkB,GAAG,MAAM;AACjC,QAAM,kBAAkB,kBAAkB,GAAG,MAAM,mBAAmB,GAAG,MAAM;AAC/E,QAAM,gBAAgB,GAAG,MAAM;AAC/B,QAAM,gBAAgB,GAAG,MAAM;AAC/B,QAAM,gBAAgB,GAAG,MAAM;AAG/B,QAAM,UAAU,CAAC,UAAgC;AAC/C,UAAM,SAAS,QAAQ,KAAK;AAC5B,QAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,WAAO,CAAC,QAAQ,QAAeD,UAAS,MAAM,OAAO,MAAM,CAAC,CAAC;AAAA,EAC/D;AAGA,QAAM,aAAa,CAAC,UAA2B;AAC7C,UAAM,SAAS,QAAQ,KAAK;AAC5B,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,cAAc,MAAa;AAAA,EACpC;AAGA,QAAM,eAAW;AAAA,IACf,OAAO,eAAuB;AAC5B,YAAM,SAAS,WAAW,QAAQ,WAAW,EAAE;AAC/C,UAAI,OAAO,WAAW,GAAG;AACvB,6BAAQ,QAAQ,WAAW,iBAAiB,MAAM,CAAC;AACnD;AAAA,MACF;AAEA,qBAAe,IAAI;AACnB,UAAI;AACF,cAAM,WAAW,kBAAkB;AACnC,cAAM,SAAS,MAAM,SAAS,UAAU;AAExC,YAAI,QAAQ;AACV,gBAAM,kBAAkB,kBAAkB,OAAO,iBAAiB,OAAO;AACzE,eAAK,eAAe;AAAA,YAClB,CAAC,eAAe,GAAG;AAAA,YACnB,CAAC,aAAa,GAAG,OAAO;AAAA,YACxB,CAAC,aAAa,GAAG,OAAO;AAAA,UAC1B,CAAC;AAAA,QACH,OAAO;AACL,+BAAQ,KAAK,WAAW,YAAY,MAAM,CAAC;AAAA,QAC7C;AAAA,MACF,SAAS,OAAO;AACd,6BAAQ,MAAM,WAAW,SAAS,MAAM,CAAC;AACzC,gBAAQ,MAAM,8BAA8B,KAAK;AAAA,MACnD,UAAE;AACA,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,MAAM,QAAQ,gBAAgB,iBAAiB,eAAe,eAAe,eAAe;AAAA,EAC/F;AAEA,QAAM,yBAAyB,OAAO,MAA2C;AAC/E,UAAM,aAAa,EAAE,OAAO,MAAM,QAAQ,WAAW,EAAE;AACvD,QAAI,cAAc,sBAAsB,WAAW,WAAW,GAAG;AAC/D,YAAM,SAAS,UAAU;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,oBAAoB,YAAY;AACpC,UAAM,aAAa,KAAK,cAAc,eAAe;AACrD,QAAI,YAAY;AACd,YAAM,SAAS,UAAU;AAAA,IAC3B;AAAA,EACF;AAEA,SACE,8EAEE;AAAA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOA,UAAS,MAAM,iBAAiB,MAAM;AAAA,QAC7C,OAAO,QAAQ,eAAe;AAAA,QAC9B,UAAU,WAAW,eAAe;AAAA,QAEpC;AAAA,UAAC;AAAA;AAAA,YACC,aAAaC,gBAAe,MAAM,iBAAiB,MAAM;AAAA,YACzD,OAAO,EAAE,OAAO,sBAAsB,mBAAmB,uBAAuB,IAAI;AAAA,YACpF,UAAU;AAAA,YACV,YACE,sBACA,oBACE;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,MAAM,cAAc,6CAAC,gCAAgB,IAAK,6CAAC,+BAAe;AAAA,gBAC1D,SAAS;AAAA,gBACT,UAAU;AAAA,gBAET,qBAAW,iBAAiB,MAAM;AAAA;AAAA,YACrC;AAAA;AAAA,QAGN;AAAA;AAAA,IACF;AAAA,IAGA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOD,UAAS,MAAM,iBAAiB,MAAM;AAAA,QAC7C,OAAO,QAAQ,eAAe;AAAA,QAC9B,UAAU,WAAW,eAAe;AAAA,QAEnC,8BACC;AAAA,UAAC;AAAA;AAAA,YACC,aAAaC,gBAAe,MAAM,iBAAiB,MAAM;AAAA,YACzD,SAAS;AAAA,YACT,OAAO,EAAE,OAAO,IAAI;AAAA,YACpB,YAAU;AAAA,YACV,kBAAiB;AAAA;AAAA,QACnB,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,aAAaA,gBAAe,MAAM,iBAAiB,MAAM;AAAA,YACzD,OAAO,EAAE,OAAO,IAAI;AAAA;AAAA,QACtB;AAAA;AAAA,IAEJ;AAAA,IAGA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOD,UAAS,MAAM,eAAe,MAAM;AAAA,QAC3C,OAAO,QAAQ,aAAa;AAAA,QAC5B,UAAU,WAAW,aAAa;AAAA,QAElC,uDAAC,sBAAM,aAAaC,gBAAe,MAAM,eAAe,MAAM,GAAG;AAAA;AAAA,IACnE;AAAA,IAGA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOD,UAAS,MAAM,eAAe,MAAM;AAAA,QAC3C,OAAO,QAAQ,aAAa;AAAA,QAC5B,UAAU,WAAW,aAAa;AAAA,QAElC,uDAAC,sBAAM,aAAaC,gBAAe,MAAM,eAAe,MAAM,GAAG;AAAA;AAAA,IACnE;AAAA,IAGA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOD,UAAS,MAAM,eAAe,MAAM;AAAA,QAC3C,OAAO,QAAQ,aAAa;AAAA,QAC5B,UAAU,WAAW,aAAa;AAAA,QAElC,uDAAC,sBAAM,aAAaC,gBAAe,MAAM,eAAe,MAAM,GAAG;AAAA;AAAA,IACnE;AAAA,KACF;AAEJ;;;ACrRA,IAAAC,eAA8C;AAoF1C,IAAAC,sBAAA;AAxDJ,SAASC,UAAS,MAAkB,OAAe,QAAwB;AACzE,SAAO,KAAK,OAAO,KAAK,GAAG,QAAQ,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG,QAAQ,IAAI,KAAK;AACrF;AAEA,SAASC,gBAAe,MAAkB,OAAe,QAAwB;AAC/E,SAAO,KAAK,OAAO,KAAK,GAAG,cAAc,MAAM,KAAK,KAAK,OAAO,KAAK,GAAG,cAAc,IAAI,KAAK;AACjG;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,GAA2B;AACzB,QAAM,SAAS,aAAa;AAE5B,QAAM,gBAAgB,GAAG,MAAM;AAC/B,QAAM,gBAAgB,GAAG,MAAM;AAC/B,QAAM,kBAAkB,GAAG,MAAM;AACjC,QAAM,kBAAkB,GAAG,MAAM;AACjC,QAAM,mBAAmB,GAAG,MAAM;AAClC,QAAM,qBAAqB,GAAG,MAAM;AACpC,QAAM,qBAAqB,GAAG,MAAM;AAEpC,QAAM,UAAU,CAAC,UAAgC;AAC/C,UAAM,SAAS,QAAQ,KAAK;AAC5B,QAAI,CAAC,OAAQ,QAAO,CAAC;AACrB,WAAO,CAAC,QAAQ,QAAeD,UAAS,MAAM,OAAO,MAAM,CAAC,CAAC;AAAA,EAC/D;AAGA,QAAM,aAAa,CAAC,UAA2B;AAC7C,UAAM,SAAS,QAAQ,KAAK;AAC5B,QAAI,CAAC,OAAQ,QAAO;AACpB,WAAO,cAAc,MAAa;AAAA,EACpC;AAEA,QAAM,eAAe,WAAW,aAAa,KAAK,WAAW,aAAa;AAC1E,QAAM,iBAAiB,WAAW,eAAe,KAAK,WAAW,eAAe;AAGhF,QAAM,iBAAiB,WAAW,OAAO,uBAAQ;AACjD,QAAM,iBAAiB,WAAW,OAAO,iBAAO;AAEhD,QAAM,YAAY,WAAW,OAAO,iBAAO;AAC3C,QAAM,cAAc,WAAW,OAAO,iBAAO;AAE7C,QAAM,cAAmC;AAAA,IACvC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,EACf;AAEA,SACE,8EAEE;AAAA,iDAAC,kBAAK,MAAL,EAAU,OAAO,WAAW,UAAU,cAAc,OAAO,EAAE,cAAc,EAAE,GAC5E,wDAAC,oBAAI,QAAQ,GACX;AAAA,mDAAC,oBAAI,MAAM,GACT,uDAAC,kBAAK,MAAL,EAAU,MAAM,eAAe,OAAO,QAAQ,aAAa,GAAG,OAAO,EAAE,cAAc,GAAG,GACvF;AAAA,QAAC;AAAA;AAAA,UACC,QAAQ,6CAAC,UAAK,OAAO,aAAc,0BAAe;AAAA,UAClD,aAAaC,gBAAe,MAAM,eAAe,MAAM;AAAA,UACvD,WAAW;AAAA;AAAA,MACb,GACF,GACF;AAAA,MACA,6CAAC,oBAAI,MAAM,IACT,uDAAC,kBAAK,MAAL,EAAU,MAAM,eAAe,OAAO,QAAQ,aAAa,GAAG,OAAO,EAAE,cAAc,GAAG,GACvF;AAAA,QAAC;AAAA;AAAA,UACC,QAAQ,6CAAC,UAAK,OAAO,aAAc,0BAAe;AAAA,UAClD,aAAaA,gBAAe,MAAM,eAAe,MAAM;AAAA;AAAA,MACzD,GACF,GACF;AAAA,OACF,GACF;AAAA,IAGA,6CAAC,kBAAK,MAAL,EAAU,OAAO,aAAa,UAAU,gBAAgB,OAAO,EAAE,cAAc,EAAE,GAChF,wDAAC,oBAAI,QAAQ,GACX;AAAA,mDAAC,oBAAI,MAAM,GACT;AAAA,QAAC,kBAAK;AAAA,QAAL;AAAA,UACC,MAAM;AAAA,UACN,OAAO,QAAQ,eAAe;AAAA,UAC9B,OAAO,EAAE,cAAc,GAAG;AAAA,UAE1B;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,6CAAC,UAAK,OAAO,aAAc,0BAAe;AAAA,cAClD,aAAaA,gBAAe,MAAM,iBAAiB,MAAM;AAAA,cACzD,WAAW;AAAA;AAAA,UACb;AAAA;AAAA,MACF,GACF;AAAA,MACA,6CAAC,oBAAI,MAAM,IACT;AAAA,QAAC,kBAAK;AAAA,QAAL;AAAA,UACC,MAAM;AAAA,UACN,OAAO,QAAQ,eAAe;AAAA,UAC9B,OAAO,EAAE,cAAc,GAAG;AAAA,UAE1B;AAAA,YAAC;AAAA;AAAA,cACC,QAAQ,6CAAC,UAAK,OAAO,aAAc,0BAAe;AAAA,cAClD,aAAaA,gBAAe,MAAM,iBAAiB,MAAM;AAAA;AAAA,UAC3D;AAAA;AAAA,MACF,GACF;AAAA,OACF,GACF;AAAA,IAGA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOD,UAAS,MAAM,kBAAkB,MAAM;AAAA,QAC9C,OAAO,QAAQ,gBAAgB;AAAA,QAC/B,UAAU,WAAW,gBAAgB;AAAA,QAEpC,+BACC;AAAA,UAAC;AAAA;AAAA,YACC,aAAaC,gBAAe,MAAM,kBAAkB,MAAM;AAAA,YAC1D,SAAS;AAAA,YACT,OAAO,EAAE,OAAO,IAAI;AAAA;AAAA,QACtB,IAEA;AAAA,UAAC;AAAA;AAAA,YACC,aAAaA,gBAAe,MAAM,kBAAkB,MAAM;AAAA,YAC1D,OAAO,EAAE,OAAO,IAAI;AAAA;AAAA,QACtB;AAAA;AAAA,IAEJ;AAAA,IAGA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOD,UAAS,MAAM,oBAAoB,MAAM;AAAA,QAChD,OAAO,QAAQ,kBAAkB;AAAA,QACjC,UAAU,WAAW,kBAAkB;AAAA,QAEvC;AAAA,UAAC;AAAA;AAAA,YACC,aAAaC,gBAAe,MAAM,oBAAoB,MAAM;AAAA,YAC5D,WAAW;AAAA,YACX,OAAO,EAAE,OAAO,IAAI;AAAA;AAAA,QACtB;AAAA;AAAA,IACF;AAAA,IAGA;AAAA,MAAC,kBAAK;AAAA,MAAL;AAAA,QACC,MAAM;AAAA,QACN,OAAOD,UAAS,MAAM,oBAAoB,MAAM;AAAA,QAChD,OAAO,QAAQ,kBAAkB;AAAA,QACjC,UAAU,WAAW,kBAAkB;AAAA,QAEvC,uDAAC,sBAAM,aAAaC,gBAAe,MAAM,oBAAoB,MAAM,GAAG;AAAA;AAAA,IACxE;AAAA,KACF;AAEJ;","names":["message","import_antd","import_jsx_runtime","getLabel","getPlaceholder","import_antd","import_jsx_runtime","getLabel","getPlaceholder"]}
@@ -287,9 +287,9 @@ function JapaneseNameField({
287
287
  }
288
288
 
289
289
  // src/components/JapaneseAddressField.tsx
290
- import { useState, useCallback } from "react";
291
- import { Form as Form2, Input as Input2, Select, Button, message } from "antd";
292
290
  import { SearchOutlined, LoadingOutlined } from "@ant-design/icons";
291
+ import { Form as Form2, Input as Input2, Select, Button, message } from "antd";
292
+ import { useState, useCallback } from "react";
293
293
  import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
294
294
  function getLabel2(i18n, field, locale) {
295
295
  return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.["en"] ?? field;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/JapaneseNameField.tsx","../../src/lib/zod-i18n.ts","../../src/lib/form-validation.ts","../../src/components/JapaneseAddressField.tsx","../../src/components/JapaneseBankField.tsx"],"sourcesContent":["/**\n * JapaneseNameField - Japanese name input component\n * Handles lastname + firstname with optional kana fields\n *\n * @example\n * ```tsx\n * import { JapaneseNameField } from '@famgia/omnify-react/components';\n *\n * <JapaneseNameField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"name\"\n * showKana={true}\n * />\n * ```\n */\nimport { Form, Input, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface JapaneseNameFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'name') */\n prefix?: string;\n /** Override required status */\n required?: boolean;\n /** Show kana fields (default: true) */\n showKana?: boolean;\n /** Custom label for name fields */\n label?: string;\n /** Custom label for kana fields */\n kanaLabel?: string;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getCompoundLabel(i18n: I18nConfig, prefix: string, locale: string): string | undefined {\n // Try to get compound-level label (e.g., 'name' -> '氏名')\n return i18n.fields[prefix]?.label?.[locale] ?? i18n.fields[prefix]?.label?.['en'];\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseNameField({\n schemas,\n i18n,\n prefix = 'name',\n required = false,\n showKana = true,\n label,\n kanaLabel,\n}: JapaneseNameFieldProps) {\n const locale = getZodLocale();\n\n const lastnameField = `${prefix}_lastname`;\n const firstnameField = `${prefix}_firstname`;\n const kanaLastnameField = `${prefix}_kana_lastname`;\n const kanaFirstnameField = `${prefix}_kana_firstname`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isFieldRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const nameRequired = isFieldRequired(lastnameField) || isFieldRequired(firstnameField) || required;\n const kanaRequired = isFieldRequired(kanaLastnameField) || isFieldRequired(kanaFirstnameField);\n\n // Try compound label first, then fallback to first field's label\n const nameLabel = label ?? getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, lastnameField, locale);\n const nameKanaLabel =\n kanaLabel ??\n `${getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, kanaLastnameField, locale)}(カナ)`;\n\n // Get short field labels (姓, 名, etc.)\n const lastnameShortLabel = locale === 'ja' ? '姓' : 'Last';\n const firstnameShortLabel = locale === 'ja' ? '名' : 'First';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n <Form.Item label={nameLabel} required={nameRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item name={lastnameField} rules={getRule(lastnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, lastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item name={firstnameField} rules={getRule(firstnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, firstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {showKana && (\n <Form.Item label={nameKanaLabel} required={kanaRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n name={kanaLastnameField}\n rules={getRule(kanaLastnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaLastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n name={kanaFirstnameField}\n rules={getRule(kanaFirstnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaFirstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n )}\n </>\n );\n}\n","/**\n * Zod i18n - Localization for Zod validation messages\n *\n * This module provides locale-aware validation messages for Zod schemas.\n * It works independently of generated schemas and can be configured at runtime.\n *\n * @example\n * ```typescript\n * import { setZodLocale, getZodMessage } from '@famgia/omnify-react/lib';\n *\n * // Set locale once at app level\n * setZodLocale('ja');\n *\n * // Get translated message\n * const msg = getZodMessage('required', { displayName: 'Email' });\n * ```\n */\n\n// Default validation messages for all supported locales\nconst DEFAULT_MESSAGES: Record<string, Record<string, string>> = {\n required: {\n en: '${displayName} is required',\n ja: '${displayName}は必須です',\n vi: '${displayName} là bắt buộc',\n ko: '${displayName}은(는) 필수입니다',\n 'zh-CN': '${displayName}是必填项',\n 'zh-TW': '${displayName}為必填欄位',\n th: '${displayName} จำเป็นต้องกรอก',\n es: '${displayName} es obligatorio',\n },\n minLength: {\n en: '${displayName} must be at least ${min} characters',\n ja: '${displayName}は${min}文字以上で入力してください',\n vi: '${displayName} phải có ít nhất ${min} ký tự',\n ko: '${displayName}은(는) ${min}자 이상이어야 합니다',\n 'zh-CN': '${displayName}至少需要${min}个字符',\n 'zh-TW': '${displayName}至少需要${min}個字元',\n th: '${displayName} ต้องมีอย่างน้อย ${min} ตัวอักษร',\n es: '${displayName} debe tener al menos ${min} caracteres',\n },\n maxLength: {\n en: '${displayName} must be at most ${max} characters',\n ja: '${displayName}は${max}文字以内で入力してください',\n vi: '${displayName} không được quá ${max} ký tự',\n ko: '${displayName}은(는) ${max}자 이하여야 합니다',\n 'zh-CN': '${displayName}最多${max}个字符',\n 'zh-TW': '${displayName}最多${max}個字元',\n th: '${displayName} ต้องไม่เกิน ${max} ตัวอักษร',\n es: '${displayName} debe tener como máximo ${max} caracteres',\n },\n min: {\n en: '${displayName} must be at least ${min}',\n ja: '${displayName}は${min}以上で入力してください',\n vi: '${displayName} phải lớn hơn hoặc bằng ${min}',\n ko: '${displayName}은(는) ${min} 이상이어야 합니다',\n 'zh-CN': '${displayName}必须大于等于${min}',\n 'zh-TW': '${displayName}必須大於等於${min}',\n th: '${displayName} ต้องมากกว่าหรือเท่ากับ ${min}',\n es: '${displayName} debe ser al menos ${min}',\n },\n max: {\n en: '${displayName} must be at most ${max}',\n ja: '${displayName}は${max}以下で入力してください',\n vi: '${displayName} phải nhỏ hơn hoặc bằng ${max}',\n ko: '${displayName}은(는) ${max} 이하여야 합니다',\n 'zh-CN': '${displayName}必须小于等于${max}',\n 'zh-TW': '${displayName}必須小於等於${max}',\n th: '${displayName} ต้องน้อยกว่าหรือเท่ากับ ${max}',\n es: '${displayName} debe ser como máximo ${max}',\n },\n email: {\n en: 'Please enter a valid email address',\n ja: '有効なメールアドレスを入力してください',\n vi: 'Vui lòng nhập địa chỉ email hợp lệ',\n ko: '유효한 이메일 주소를 입력하세요',\n 'zh-CN': '请输入有效的电子邮件地址',\n 'zh-TW': '請輸入有效的電子郵件地址',\n th: 'กรุณากรอกอีเมลที่ถูกต้อง',\n es: 'Por favor, introduce una dirección de correo electrónico válida',\n },\n url: {\n en: 'Please enter a valid URL',\n ja: '有効なURLを入力してください',\n vi: 'Vui lòng nhập URL hợp lệ',\n ko: '유효한 URL을 입력하세요',\n 'zh-CN': '请输入有效的URL',\n 'zh-TW': '請輸入有效的網址',\n th: 'กรุณากรอก URL ที่ถูกต้อง',\n es: 'Por favor, introduce una URL válida',\n },\n pattern: {\n en: '${displayName} format is invalid',\n ja: '${displayName}の形式が正しくありません',\n vi: '${displayName} không đúng định dạng',\n ko: '${displayName} 형식이 올바르지 않습니다',\n 'zh-CN': '${displayName}格式不正确',\n 'zh-TW': '${displayName}格式不正確',\n th: 'รูปแบบ${displayName}ไม่ถูกต้อง',\n es: 'El formato de ${displayName} no es válido',\n },\n};\n\n// State\nlet currentLocale = 'ja';\nlet fallbackLocale = 'en';\nlet customMessages: Record<string, Record<string, string>> = {};\n\n/**\n * Reset all settings to defaults (for testing)\n * @internal\n */\nexport function resetZodI18n(): void {\n currentLocale = 'ja';\n fallbackLocale = 'en';\n customMessages = {};\n}\n\n/**\n * Set current locale for Zod validation messages\n */\nexport function setZodLocale(locale: string): void {\n currentLocale = locale;\n}\n\n/**\n * Get current locale\n */\nexport function getZodLocale(): string {\n return currentLocale;\n}\n\n/**\n * Set fallback locale (used when message not found in current locale)\n */\nexport function setZodFallbackLocale(locale: string): void {\n fallbackLocale = locale;\n}\n\n/**\n * Get fallback locale\n */\nexport function getZodFallbackLocale(): string {\n return fallbackLocale;\n}\n\n/**\n * Add custom validation messages\n * @param messages - Object with message keys and locale values\n */\nexport function addZodMessages(messages: Record<string, Record<string, string>>): void {\n for (const [key, locales] of Object.entries(messages)) {\n customMessages[key] = { ...customMessages[key], ...locales };\n }\n}\n\n/**\n * Get translated validation message\n *\n * @param key - Message key (e.g., 'required', 'minLength')\n * @param params - Template parameters to replace\n * @returns Formatted message string\n *\n * @example\n * getZodMessage('required', { displayName: '氏名' })\n * // => '氏名は必須です'\n */\nexport function getZodMessage(\n key: string,\n params: Record<string, string | number> = {}\n): string {\n // Try custom messages first, then defaults\n const messages = customMessages[key] ?? DEFAULT_MESSAGES[key];\n if (!messages) return key;\n\n let message =\n messages[currentLocale] ??\n messages[fallbackLocale] ??\n messages['en'] ??\n key;\n\n // Replace template placeholders\n for (const [param, value] of Object.entries(params)) {\n message = message.replace(new RegExp(`\\\\$\\\\{${param}\\\\}`, 'g'), String(value));\n }\n\n return message;\n}\n\n/**\n * Get all messages for a specific locale\n */\nexport function getZodMessages(locale?: string): Record<string, string> {\n const targetLocale = locale ?? currentLocale;\n const result: Record<string, string> = {};\n\n // Start with defaults\n for (const [key, locales] of Object.entries(DEFAULT_MESSAGES)) {\n result[key] = locales[targetLocale] ?? locales[fallbackLocale] ?? locales['en'] ?? key;\n }\n\n // Override with custom\n for (const [key, locales] of Object.entries(customMessages)) {\n if (locales[targetLocale]) {\n result[key] = locales[targetLocale];\n }\n }\n\n return result;\n}\n","/**\n * Form validation utilities for Ant Design + Zod\n *\n * Compatible with Zod v3.x and v4.x\n *\n * @example\n * ```typescript\n * import { zodRule, requiredRule } from '@famgia/omnify-react/lib';\n *\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n * ```\n */\n\nimport type { RuleObject } from 'antd/es/form';\nimport type { z } from 'zod';\nimport { getZodMessage } from './zod-i18n';\n\n/**\n * Convert Zod schema to Ant Design Form rule with i18n support\n *\n * @example\n * // Set locale once at component level\n * setZodLocale('ja');\n *\n * // Use without passing locale\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function zodRule<T extends z.ZodTypeAny>(\n schema: T,\n displayName?: string\n): RuleObject {\n const field = displayName ?? 'この項目';\n\n return {\n validator: async (_, value) => {\n // 空チェック - 必須として扱う\n if (value === undefined || value === null || value === '') {\n if (schema.safeParse(undefined).success) return;\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n const result = schema.safeParse(value);\n if (result.success) return;\n\n // 最初のZodエラーを取得\n const issue = result.error.issues[0];\n if (!issue) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n // エラータイプに基づいて翻訳(Zod v3/v4対応)\n const issueAny = issue as unknown as Record<string, unknown>;\n switch (issue.code) {\n case 'too_small': {\n const origin = issueAny.origin as string | undefined;\n const minimum = issueAny.minimum as number;\n if (origin === 'string' && minimum === 1) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n if (origin === 'string') {\n throw new Error(getZodMessage('minLength', { displayName: field, min: minimum }));\n }\n throw new Error(getZodMessage('min', { displayName: field, min: minimum }));\n }\n\n case 'too_big': {\n const origin = issueAny.origin as string | undefined;\n const maximum = issueAny.maximum as number;\n if (origin === 'string') {\n throw new Error(getZodMessage('maxLength', { displayName: field, max: maximum }));\n }\n throw new Error(getZodMessage('max', { displayName: field, max: maximum }));\n }\n\n // Zod v4: 'invalid_string' → 'invalid_format'\n case 'invalid_format': {\n const format = issueAny.format as string | undefined;\n if (format === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (format === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (format === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n break;\n }\n\n // Zod v3: 'invalid_string' (handled via default case for forward compatibility)\n default: {\n // Zod v3 compatibility: handle invalid_string code\n if ((issue.code as string) === 'invalid_string') {\n const validation = issueAny.validation as string | undefined;\n if (validation === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (validation === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (validation === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n }\n break;\n }\n\n case 'invalid_type': {\n const expected = issueAny.expected as string | undefined;\n if (expected && value === undefined) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n break;\n }\n }\n\n // フォールバック: Zodのオリジナルメッセージを使用\n throw new Error(issue.message);\n },\n };\n}\n\n/**\n * Create required rule with i18n message\n *\n * @example\n * <Form.Item\n * name=\"name\"\n * rules={[requiredRule('名前')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function requiredRule(displayName: string): RuleObject {\n return {\n required: true,\n message: getZodMessage('required', { displayName }),\n };\n}\n\n/**\n * Check if a Zod schema represents a required field\n */\nexport function isZodRequired(schema: z.ZodTypeAny): boolean {\n const schemaDesc = (schema as any)?._def?.typeName;\n const inner = (schema as any)?._def?.innerType;\n\n if (schemaDesc === 'ZodOptional' || schemaDesc === 'ZodNullable') return false;\n if (inner?._def?.typeName === 'ZodOptional' || inner?._def?.typeName === 'ZodNullable') return false;\n\n return true;\n}\n","/**\n * JapaneseAddressField - Japanese address input component\n * Handles postal code, prefecture, address fields with postal code lookup\n *\n * @example\n * ```tsx\n * import { JapaneseAddressField } from '@famgia/omnify-react/components';\n *\n * <JapaneseAddressField\n * form={form}\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"address\"\n * prefectureOptions={prefectureOptions}\n * />\n * ```\n */\nimport { useState, useCallback } from 'react';\nimport { Form, Input, Select, Button, message } from 'antd';\nimport { SearchOutlined, LoadingOutlined } from '@ant-design/icons';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface PostalLookupResult {\n prefecture?: string;\n prefectureCode?: string;\n prefectureName?: string;\n address1?: string;\n address2?: string;\n}\n\nexport interface JapaneseAddressFieldProps {\n /** Ant Design form instance */\n form: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'address') */\n prefix?: string;\n /** Use prefecture ID instead of code (default: false) */\n usePrefectureId?: boolean;\n /** Prefecture options for select. If not provided, a simple input is shown */\n prefectureOptions?: SelectOption[];\n /** Enable postal code lookup (default: true) */\n enablePostalLookup?: boolean;\n /** Show search button (default: true) */\n showSearchButton?: boolean;\n /** Auto search when postal code is complete (default: true) */\n autoSearch?: boolean;\n /** Custom postal lookup function */\n onPostalLookup?: (postalCode: string) => Promise<PostalLookupResult | null>;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\n// Default postal lookup function using zipcloud API\nasync function lookupPostalCode(postalCode: string): Promise<PostalLookupResult | null> {\n try {\n const response = await fetch(`https://zipcloud.ibsnet.co.jp/api/search?zipcode=${postalCode}`);\n const data = await response.json();\n\n if (data.results && data.results.length > 0) {\n const result = data.results[0];\n return {\n prefectureCode: result.prefcode,\n prefectureName: result.address1,\n address1: result.address2,\n address2: result.address3,\n };\n }\n return null;\n } catch (error) {\n console.error('Postal code lookup failed:', error);\n return null;\n }\n}\n\n// Localized messages\nconst MESSAGES = {\n ja: {\n searchAddress: '住所検索',\n searching: '検索中...',\n notFound: '郵便番号が見つかりませんでした',\n error: '住所検索に失敗しました',\n invalidFormat: '郵便番号の形式が正しくありません(例:123-4567)',\n },\n en: {\n searchAddress: 'Search Address',\n searching: 'Searching...',\n notFound: 'Postal code not found',\n error: 'Address lookup failed',\n invalidFormat: 'Invalid postal code format (e.g., 123-4567)',\n },\n vi: {\n searchAddress: 'Tìm địa chỉ',\n searching: 'Đang tìm...',\n notFound: 'Không tìm thấy mã bưu điện',\n error: 'Tìm địa chỉ thất bại',\n invalidFormat: 'Định dạng mã bưu điện không hợp lệ (VD: 123-4567)',\n },\n} as const;\n\nfunction getMessage(key: keyof (typeof MESSAGES)['ja'], locale: string): string {\n return (MESSAGES as any)[locale]?.[key] ?? MESSAGES.ja[key];\n}\n\nexport function JapaneseAddressField({\n form,\n schemas,\n i18n,\n prefix = 'address',\n usePrefectureId = false,\n prefectureOptions,\n enablePostalLookup = true,\n showSearchButton = true,\n autoSearch = true,\n onPostalLookup,\n}: JapaneseAddressFieldProps) {\n const locale = getZodLocale();\n const [isSearching, setIsSearching] = useState(false);\n\n // Field names\n const postalCodeField = `${prefix}_postal_code`;\n const prefectureField = usePrefectureId ? `${prefix}_prefecture_id` : `${prefix}_prefecture`;\n const address1Field = `${prefix}_address1`;\n const address2Field = `${prefix}_address2`;\n const address3Field = `${prefix}_address3`;\n\n // Get rules from schemas\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema description\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n // Lookup address from postal code\n const doLookup = useCallback(\n async (postalCode: string) => {\n const digits = postalCode.replace(/[^0-9]/g, '');\n if (digits.length !== 7) {\n message.warning(getMessage('invalidFormat', locale));\n return;\n }\n\n setIsSearching(true);\n try {\n const lookupFn = onPostalLookup ?? lookupPostalCode;\n const result = await lookupFn(postalCode);\n\n if (result) {\n const prefectureValue = usePrefectureId ? result.prefectureCode : result.prefecture;\n form.setFieldsValue({\n [prefectureField]: prefectureValue,\n [address1Field]: result.address1,\n [address2Field]: result.address2,\n });\n } else {\n message.info(getMessage('notFound', locale));\n }\n } catch (error) {\n message.error(getMessage('error', locale));\n console.error('Postal code lookup failed:', error);\n } finally {\n setIsSearching(false);\n }\n },\n [form, locale, onPostalLookup, prefectureField, address1Field, address2Field, usePrefectureId]\n );\n\n const handlePostalCodeChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const postalCode = e.target.value.replace(/[^0-9]/g, '');\n if (autoSearch && enablePostalLookup && postalCode.length === 7) {\n await doLookup(postalCode);\n }\n };\n\n const handleSearchClick = async () => {\n const postalCode = form.getFieldValue(postalCodeField);\n if (postalCode) {\n await doLookup(postalCode);\n }\n };\n\n return (\n <>\n {/* 郵便番号 */}\n <Form.Item\n name={postalCodeField}\n label={getLabel(i18n, postalCodeField, locale)}\n rules={getRule(postalCodeField)}\n required={isRequired(postalCodeField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, postalCodeField, locale)}\n style={{ width: enablePostalLookup && showSearchButton ? 'calc(100% - 110px)' : 150 }}\n onChange={handlePostalCodeChange}\n addonAfter={\n enablePostalLookup &&\n showSearchButton && (\n <Button\n type=\"text\"\n size=\"small\"\n icon={isSearching ? <LoadingOutlined /> : <SearchOutlined />}\n onClick={handleSearchClick}\n disabled={isSearching}\n >\n {getMessage('searchAddress', locale)}\n </Button>\n )\n }\n />\n </Form.Item>\n\n {/* 都道府県 */}\n <Form.Item\n name={prefectureField}\n label={getLabel(i18n, prefectureField, locale)}\n rules={getRule(prefectureField)}\n required={isRequired(prefectureField)}\n >\n {prefectureOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n options={prefectureOptions}\n style={{ width: 200 }}\n showSearch\n optionFilterProp=\"label\"\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n style={{ width: 200 }}\n />\n )}\n </Form.Item>\n\n {/* 市区町村 */}\n <Form.Item\n name={address1Field}\n label={getLabel(i18n, address1Field, locale)}\n rules={getRule(address1Field)}\n required={isRequired(address1Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address1Field, locale)} />\n </Form.Item>\n\n {/* 番地 */}\n <Form.Item\n name={address2Field}\n label={getLabel(i18n, address2Field, locale)}\n rules={getRule(address2Field)}\n required={isRequired(address2Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address2Field, locale)} />\n </Form.Item>\n\n {/* 建物名・部屋番号 */}\n <Form.Item\n name={address3Field}\n label={getLabel(i18n, address3Field, locale)}\n rules={getRule(address3Field)}\n required={isRequired(address3Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address3Field, locale)} />\n </Form.Item>\n </>\n );\n}\n","/**\n * JapaneseBankField - Japanese bank account input component\n *\n * @example\n * ```tsx\n * import { JapaneseBankField } from '@famgia/omnify-react/components';\n *\n * <JapaneseBankField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"bank\"\n * accountTypeOptions={accountTypeOptions}\n * />\n * ```\n */\nimport { Form, Input, Select, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface JapaneseBankFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'bank') */\n prefix?: string;\n /** Account type options. If not provided, a simple input is shown */\n accountTypeOptions?: SelectOption[];\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseBankField({\n schemas,\n i18n,\n prefix = 'bank',\n accountTypeOptions,\n}: JapaneseBankFieldProps) {\n const locale = getZodLocale();\n\n const bankCodeField = `${prefix}_bank_code`;\n const bankNameField = `${prefix}_bank_name`;\n const branchCodeField = `${prefix}_branch_code`;\n const branchNameField = `${prefix}_branch_name`;\n const accountTypeField = `${prefix}_account_type`;\n const accountNumberField = `${prefix}_account_number`;\n const accountHolderField = `${prefix}_account_holder`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const bankRequired = isRequired(bankCodeField) || isRequired(bankNameField);\n const branchRequired = isRequired(branchCodeField) || isRequired(branchNameField);\n\n // Short labels\n const codeShortLabel = locale === 'ja' ? 'コード' : 'Code';\n const nameShortLabel = locale === 'ja' ? '名称' : 'Name';\n\n const bankLabel = locale === 'ja' ? '銀行' : 'Bank';\n const branchLabel = locale === 'ja' ? '支店' : 'Branch';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n {/* 銀行コード・銀行名 */}\n <Form.Item label={bankLabel} required={bankRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item name={bankCodeField} rules={getRule(bankCodeField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankCodeField, locale)}\n maxLength={4}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item name={bankNameField} rules={getRule(bankNameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 支店コード・支店名 */}\n <Form.Item label={branchLabel} required={branchRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item\n name={branchCodeField}\n rules={getRule(branchCodeField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchCodeField, locale)}\n maxLength={3}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item\n name={branchNameField}\n rules={getRule(branchNameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 口座種別 */}\n <Form.Item\n name={accountTypeField}\n label={getLabel(i18n, accountTypeField, locale)}\n rules={getRule(accountTypeField)}\n required={isRequired(accountTypeField)}\n >\n {accountTypeOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n options={accountTypeOptions}\n style={{ width: 150 }}\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n style={{ width: 150 }}\n />\n )}\n </Form.Item>\n\n {/* 口座番号 */}\n <Form.Item\n name={accountNumberField}\n label={getLabel(i18n, accountNumberField, locale)}\n rules={getRule(accountNumberField)}\n required={isRequired(accountNumberField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, accountNumberField, locale)}\n maxLength={7}\n style={{ width: 150 }}\n />\n </Form.Item>\n\n {/* 口座名義 */}\n <Form.Item\n name={accountHolderField}\n label={getLabel(i18n, accountHolderField, locale)}\n rules={getRule(accountHolderField)}\n required={isRequired(accountHolderField)}\n >\n <Input placeholder={getPlaceholder(i18n, accountHolderField, locale)} />\n </Form.Item>\n </>\n );\n}\n"],"mappings":"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","names":["message","Form","Input","Fragment","jsx","jsxs","getLabel","getPlaceholder","Form","Input","Form","Input","Select","Row","Col","Fragment","jsx","jsxs","getLabel","getPlaceholder","Form","Row","Col","Input","Select"]}
1
+ {"version":3,"sources":["../../src/components/JapaneseNameField.tsx","../../src/lib/zod-i18n.ts","../../src/lib/form-validation.ts","../../src/components/JapaneseAddressField.tsx","../../src/components/JapaneseBankField.tsx"],"sourcesContent":["/**\n * JapaneseNameField - Japanese name input component\n * Handles lastname + firstname with optional kana fields\n *\n * @example\n * ```tsx\n * import { JapaneseNameField } from '@famgia/omnify-react/components';\n *\n * <JapaneseNameField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"name\"\n * showKana={true}\n * />\n * ```\n */\nimport { Form, Input, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface JapaneseNameFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'name') */\n prefix?: string;\n /** Override required status */\n required?: boolean;\n /** Show kana fields (default: true) */\n showKana?: boolean;\n /** Custom label for name fields */\n label?: string;\n /** Custom label for kana fields */\n kanaLabel?: string;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getCompoundLabel(i18n: I18nConfig, prefix: string, locale: string): string | undefined {\n // Try to get compound-level label (e.g., 'name' -> '氏名')\n return i18n.fields[prefix]?.label?.[locale] ?? i18n.fields[prefix]?.label?.['en'];\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseNameField({\n schemas,\n i18n,\n prefix = 'name',\n required = false,\n showKana = true,\n label,\n kanaLabel,\n}: JapaneseNameFieldProps) {\n const locale = getZodLocale();\n\n const lastnameField = `${prefix}_lastname`;\n const firstnameField = `${prefix}_firstname`;\n const kanaLastnameField = `${prefix}_kana_lastname`;\n const kanaFirstnameField = `${prefix}_kana_firstname`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isFieldRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const nameRequired = isFieldRequired(lastnameField) || isFieldRequired(firstnameField) || required;\n const kanaRequired = isFieldRequired(kanaLastnameField) || isFieldRequired(kanaFirstnameField);\n\n // Try compound label first, then fallback to first field's label\n const nameLabel = label ?? getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, lastnameField, locale);\n const nameKanaLabel =\n kanaLabel ??\n `${getCompoundLabel(i18n, prefix, locale) ?? getLabel(i18n, kanaLastnameField, locale)}(カナ)`;\n\n // Get short field labels (姓, 名, etc.)\n const lastnameShortLabel = locale === 'ja' ? '姓' : 'Last';\n const firstnameShortLabel = locale === 'ja' ? '名' : 'First';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n <Form.Item label={nameLabel} required={nameRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item name={lastnameField} rules={getRule(lastnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, lastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item name={firstnameField} rules={getRule(firstnameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, firstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {showKana && (\n <Form.Item label={nameKanaLabel} required={kanaRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={12}>\n <Form.Item\n name={kanaLastnameField}\n rules={getRule(kanaLastnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{lastnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaLastnameField, locale)}\n />\n </Form.Item>\n </Col>\n <Col span={12}>\n <Form.Item\n name={kanaFirstnameField}\n rules={getRule(kanaFirstnameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{firstnameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, kanaFirstnameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n )}\n </>\n );\n}\n","/**\n * Zod i18n - Localization for Zod validation messages\n *\n * This module provides locale-aware validation messages for Zod schemas.\n * It works independently of generated schemas and can be configured at runtime.\n *\n * @example\n * ```typescript\n * import { setZodLocale, getZodMessage } from '@famgia/omnify-react/lib';\n *\n * // Set locale once at app level\n * setZodLocale('ja');\n *\n * // Get translated message\n * const msg = getZodMessage('required', { displayName: 'Email' });\n * ```\n */\n\n// Default validation messages for all supported locales\nconst DEFAULT_MESSAGES: Record<string, Record<string, string>> = {\n required: {\n en: '${displayName} is required',\n ja: '${displayName}は必須です',\n vi: '${displayName} là bắt buộc',\n ko: '${displayName}은(는) 필수입니다',\n 'zh-CN': '${displayName}是必填项',\n 'zh-TW': '${displayName}為必填欄位',\n th: '${displayName} จำเป็นต้องกรอก',\n es: '${displayName} es obligatorio',\n },\n minLength: {\n en: '${displayName} must be at least ${min} characters',\n ja: '${displayName}は${min}文字以上で入力してください',\n vi: '${displayName} phải có ít nhất ${min} ký tự',\n ko: '${displayName}은(는) ${min}자 이상이어야 합니다',\n 'zh-CN': '${displayName}至少需要${min}个字符',\n 'zh-TW': '${displayName}至少需要${min}個字元',\n th: '${displayName} ต้องมีอย่างน้อย ${min} ตัวอักษร',\n es: '${displayName} debe tener al menos ${min} caracteres',\n },\n maxLength: {\n en: '${displayName} must be at most ${max} characters',\n ja: '${displayName}は${max}文字以内で入力してください',\n vi: '${displayName} không được quá ${max} ký tự',\n ko: '${displayName}은(는) ${max}자 이하여야 합니다',\n 'zh-CN': '${displayName}最多${max}个字符',\n 'zh-TW': '${displayName}最多${max}個字元',\n th: '${displayName} ต้องไม่เกิน ${max} ตัวอักษร',\n es: '${displayName} debe tener como máximo ${max} caracteres',\n },\n min: {\n en: '${displayName} must be at least ${min}',\n ja: '${displayName}は${min}以上で入力してください',\n vi: '${displayName} phải lớn hơn hoặc bằng ${min}',\n ko: '${displayName}은(는) ${min} 이상이어야 합니다',\n 'zh-CN': '${displayName}必须大于等于${min}',\n 'zh-TW': '${displayName}必須大於等於${min}',\n th: '${displayName} ต้องมากกว่าหรือเท่ากับ ${min}',\n es: '${displayName} debe ser al menos ${min}',\n },\n max: {\n en: '${displayName} must be at most ${max}',\n ja: '${displayName}は${max}以下で入力してください',\n vi: '${displayName} phải nhỏ hơn hoặc bằng ${max}',\n ko: '${displayName}은(는) ${max} 이하여야 합니다',\n 'zh-CN': '${displayName}必须小于等于${max}',\n 'zh-TW': '${displayName}必須小於等於${max}',\n th: '${displayName} ต้องน้อยกว่าหรือเท่ากับ ${max}',\n es: '${displayName} debe ser como máximo ${max}',\n },\n email: {\n en: 'Please enter a valid email address',\n ja: '有効なメールアドレスを入力してください',\n vi: 'Vui lòng nhập địa chỉ email hợp lệ',\n ko: '유효한 이메일 주소를 입력하세요',\n 'zh-CN': '请输入有效的电子邮件地址',\n 'zh-TW': '請輸入有效的電子郵件地址',\n th: 'กรุณากรอกอีเมลที่ถูกต้อง',\n es: 'Por favor, introduce una dirección de correo electrónico válida',\n },\n url: {\n en: 'Please enter a valid URL',\n ja: '有効なURLを入力してください',\n vi: 'Vui lòng nhập URL hợp lệ',\n ko: '유효한 URL을 입력하세요',\n 'zh-CN': '请输入有效的URL',\n 'zh-TW': '請輸入有效的網址',\n th: 'กรุณากรอก URL ที่ถูกต้อง',\n es: 'Por favor, introduce una URL válida',\n },\n pattern: {\n en: '${displayName} format is invalid',\n ja: '${displayName}の形式が正しくありません',\n vi: '${displayName} không đúng định dạng',\n ko: '${displayName} 형식이 올바르지 않습니다',\n 'zh-CN': '${displayName}格式不正确',\n 'zh-TW': '${displayName}格式不正確',\n th: 'รูปแบบ${displayName}ไม่ถูกต้อง',\n es: 'El formato de ${displayName} no es válido',\n },\n};\n\n// State\nlet currentLocale = 'ja';\nlet fallbackLocale = 'en';\nlet customMessages: Record<string, Record<string, string>> = {};\n\n/**\n * Reset all settings to defaults (for testing)\n * @internal\n */\nexport function resetZodI18n(): void {\n currentLocale = 'ja';\n fallbackLocale = 'en';\n customMessages = {};\n}\n\n/**\n * Set current locale for Zod validation messages\n */\nexport function setZodLocale(locale: string): void {\n currentLocale = locale;\n}\n\n/**\n * Get current locale\n */\nexport function getZodLocale(): string {\n return currentLocale;\n}\n\n/**\n * Set fallback locale (used when message not found in current locale)\n */\nexport function setZodFallbackLocale(locale: string): void {\n fallbackLocale = locale;\n}\n\n/**\n * Get fallback locale\n */\nexport function getZodFallbackLocale(): string {\n return fallbackLocale;\n}\n\n/**\n * Add custom validation messages\n * @param messages - Object with message keys and locale values\n */\nexport function addZodMessages(messages: Record<string, Record<string, string>>): void {\n for (const [key, locales] of Object.entries(messages)) {\n customMessages[key] = { ...customMessages[key], ...locales };\n }\n}\n\n/**\n * Get translated validation message\n *\n * @param key - Message key (e.g., 'required', 'minLength')\n * @param params - Template parameters to replace\n * @returns Formatted message string\n *\n * @example\n * getZodMessage('required', { displayName: '氏名' })\n * // => '氏名は必須です'\n */\nexport function getZodMessage(\n key: string,\n params: Record<string, string | number> = {}\n): string {\n // Try custom messages first, then defaults\n const messages = customMessages[key] ?? DEFAULT_MESSAGES[key];\n if (!messages) return key;\n\n let message =\n messages[currentLocale] ??\n messages[fallbackLocale] ??\n messages['en'] ??\n key;\n\n // Replace template placeholders\n for (const [param, value] of Object.entries(params)) {\n message = message.replace(new RegExp(`\\\\$\\\\{${param}\\\\}`, 'g'), String(value));\n }\n\n return message;\n}\n\n/**\n * Get all messages for a specific locale\n */\nexport function getZodMessages(locale?: string): Record<string, string> {\n const targetLocale = locale ?? currentLocale;\n const result: Record<string, string> = {};\n\n // Start with defaults\n for (const [key, locales] of Object.entries(DEFAULT_MESSAGES)) {\n result[key] = locales[targetLocale] ?? locales[fallbackLocale] ?? locales['en'] ?? key;\n }\n\n // Override with custom\n for (const [key, locales] of Object.entries(customMessages)) {\n if (locales[targetLocale]) {\n result[key] = locales[targetLocale];\n }\n }\n\n return result;\n}\n","/**\n * Form validation utilities for Ant Design + Zod\n *\n * Compatible with Zod v3.x and v4.x\n *\n * @example\n * ```typescript\n * import { zodRule, requiredRule } from '@famgia/omnify-react/lib';\n *\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n * ```\n */\n\nimport type { RuleObject } from 'antd/es/form';\nimport type { z } from 'zod';\nimport { getZodMessage } from './zod-i18n';\n\n/**\n * Convert Zod schema to Ant Design Form rule with i18n support\n *\n * @example\n * // Set locale once at component level\n * setZodLocale('ja');\n *\n * // Use without passing locale\n * <Form.Item\n * name=\"email\"\n * rules={[zodRule(customerSchemas.email, 'メールアドレス')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function zodRule<T extends z.ZodTypeAny>(\n schema: T,\n displayName?: string\n): RuleObject {\n const field = displayName ?? 'この項目';\n\n return {\n validator: async (_, value) => {\n // 空チェック - 必須として扱う\n if (value === undefined || value === null || value === '') {\n if (schema.safeParse(undefined).success) return;\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n const result = schema.safeParse(value);\n if (result.success) return;\n\n // 最初のZodエラーを取得\n const issue = result.error.issues[0];\n if (!issue) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n\n // エラータイプに基づいて翻訳(Zod v3/v4対応)\n const issueAny = issue as unknown as Record<string, unknown>;\n switch (issue.code) {\n case 'too_small': {\n const origin = issueAny.origin as string | undefined;\n const minimum = issueAny.minimum as number;\n if (origin === 'string' && minimum === 1) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n if (origin === 'string') {\n throw new Error(getZodMessage('minLength', { displayName: field, min: minimum }));\n }\n throw new Error(getZodMessage('min', { displayName: field, min: minimum }));\n }\n\n case 'too_big': {\n const origin = issueAny.origin as string | undefined;\n const maximum = issueAny.maximum as number;\n if (origin === 'string') {\n throw new Error(getZodMessage('maxLength', { displayName: field, max: maximum }));\n }\n throw new Error(getZodMessage('max', { displayName: field, max: maximum }));\n }\n\n // Zod v4: 'invalid_string' → 'invalid_format'\n case 'invalid_format': {\n const format = issueAny.format as string | undefined;\n if (format === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (format === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (format === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n break;\n }\n\n // Zod v3: 'invalid_string' (handled via default case for forward compatibility)\n default: {\n // Zod v3 compatibility: handle invalid_string code\n if ((issue.code as string) === 'invalid_string') {\n const validation = issueAny.validation as string | undefined;\n if (validation === 'email') {\n throw new Error(getZodMessage('email', { displayName: field }));\n }\n if (validation === 'url') {\n throw new Error(getZodMessage('url', { displayName: field }));\n }\n if (validation === 'regex') {\n throw new Error(getZodMessage('pattern', { displayName: field }));\n }\n }\n break;\n }\n\n case 'invalid_type': {\n const expected = issueAny.expected as string | undefined;\n if (expected && value === undefined) {\n throw new Error(getZodMessage('required', { displayName: field }));\n }\n break;\n }\n }\n\n // フォールバック: Zodのオリジナルメッセージを使用\n throw new Error(issue.message);\n },\n };\n}\n\n/**\n * Create required rule with i18n message\n *\n * @example\n * <Form.Item\n * name=\"name\"\n * rules={[requiredRule('名前')]}\n * >\n * <Input />\n * </Form.Item>\n */\nexport function requiredRule(displayName: string): RuleObject {\n return {\n required: true,\n message: getZodMessage('required', { displayName }),\n };\n}\n\n/**\n * Check if a Zod schema represents a required field\n */\nexport function isZodRequired(schema: z.ZodTypeAny): boolean {\n const schemaDesc = (schema as any)?._def?.typeName;\n const inner = (schema as any)?._def?.innerType;\n\n if (schemaDesc === 'ZodOptional' || schemaDesc === 'ZodNullable') return false;\n if (inner?._def?.typeName === 'ZodOptional' || inner?._def?.typeName === 'ZodNullable') return false;\n\n return true;\n}\n","/**\n * JapaneseAddressField - Japanese address input component\n * Handles postal code, prefecture, address fields with postal code lookup\n *\n * @example\n * ```tsx\n * import { JapaneseAddressField } from '@famgia/omnify-react/components';\n *\n * <JapaneseAddressField\n * form={form}\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"address\"\n * prefectureOptions={prefectureOptions}\n * />\n * ```\n */\nimport { SearchOutlined, LoadingOutlined } from '@ant-design/icons';\nimport { Form, Input, Select, Button, message } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { useState, useCallback } from 'react';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface PostalLookupResult {\n prefecture?: string;\n prefectureCode?: string;\n prefectureName?: string;\n address1?: string;\n address2?: string;\n}\n\nexport interface JapaneseAddressFieldProps {\n /** Ant Design form instance */\n form: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'address') */\n prefix?: string;\n /** Use prefecture ID instead of code (default: false) */\n usePrefectureId?: boolean;\n /** Prefecture options for select. If not provided, a simple input is shown */\n prefectureOptions?: SelectOption[];\n /** Enable postal code lookup (default: true) */\n enablePostalLookup?: boolean;\n /** Show search button (default: true) */\n showSearchButton?: boolean;\n /** Auto search when postal code is complete (default: true) */\n autoSearch?: boolean;\n /** Custom postal lookup function */\n onPostalLookup?: (postalCode: string) => Promise<PostalLookupResult | null>;\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\n// Default postal lookup function using zipcloud API\nasync function lookupPostalCode(postalCode: string): Promise<PostalLookupResult | null> {\n try {\n const response = await fetch(`https://zipcloud.ibsnet.co.jp/api/search?zipcode=${postalCode}`);\n const data = await response.json();\n\n if (data.results && data.results.length > 0) {\n const result = data.results[0];\n return {\n prefectureCode: result.prefcode,\n prefectureName: result.address1,\n address1: result.address2,\n address2: result.address3,\n };\n }\n return null;\n } catch (error) {\n console.error('Postal code lookup failed:', error);\n return null;\n }\n}\n\n// Localized messages\nconst MESSAGES = {\n ja: {\n searchAddress: '住所検索',\n searching: '検索中...',\n notFound: '郵便番号が見つかりませんでした',\n error: '住所検索に失敗しました',\n invalidFormat: '郵便番号の形式が正しくありません(例:123-4567)',\n },\n en: {\n searchAddress: 'Search Address',\n searching: 'Searching...',\n notFound: 'Postal code not found',\n error: 'Address lookup failed',\n invalidFormat: 'Invalid postal code format (e.g., 123-4567)',\n },\n vi: {\n searchAddress: 'Tìm địa chỉ',\n searching: 'Đang tìm...',\n notFound: 'Không tìm thấy mã bưu điện',\n error: 'Tìm địa chỉ thất bại',\n invalidFormat: 'Định dạng mã bưu điện không hợp lệ (VD: 123-4567)',\n },\n} as const;\n\nfunction getMessage(key: keyof (typeof MESSAGES)['ja'], locale: string): string {\n return (MESSAGES as any)[locale]?.[key] ?? MESSAGES.ja[key];\n}\n\nexport function JapaneseAddressField({\n form,\n schemas,\n i18n,\n prefix = 'address',\n usePrefectureId = false,\n prefectureOptions,\n enablePostalLookup = true,\n showSearchButton = true,\n autoSearch = true,\n onPostalLookup,\n}: JapaneseAddressFieldProps) {\n const locale = getZodLocale();\n const [isSearching, setIsSearching] = useState(false);\n\n // Field names\n const postalCodeField = `${prefix}_postal_code`;\n const prefectureField = usePrefectureId ? `${prefix}_prefecture_id` : `${prefix}_prefecture`;\n const address1Field = `${prefix}_address1`;\n const address2Field = `${prefix}_address2`;\n const address3Field = `${prefix}_address3`;\n\n // Get rules from schemas\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema description\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n // Lookup address from postal code\n const doLookup = useCallback(\n async (postalCode: string) => {\n const digits = postalCode.replace(/[^0-9]/g, '');\n if (digits.length !== 7) {\n message.warning(getMessage('invalidFormat', locale));\n return;\n }\n\n setIsSearching(true);\n try {\n const lookupFn = onPostalLookup ?? lookupPostalCode;\n const result = await lookupFn(postalCode);\n\n if (result) {\n const prefectureValue = usePrefectureId ? result.prefectureCode : result.prefecture;\n form.setFieldsValue({\n [prefectureField]: prefectureValue,\n [address1Field]: result.address1,\n [address2Field]: result.address2,\n });\n } else {\n message.info(getMessage('notFound', locale));\n }\n } catch (error) {\n message.error(getMessage('error', locale));\n console.error('Postal code lookup failed:', error);\n } finally {\n setIsSearching(false);\n }\n },\n [form, locale, onPostalLookup, prefectureField, address1Field, address2Field, usePrefectureId]\n );\n\n const handlePostalCodeChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const postalCode = e.target.value.replace(/[^0-9]/g, '');\n if (autoSearch && enablePostalLookup && postalCode.length === 7) {\n await doLookup(postalCode);\n }\n };\n\n const handleSearchClick = async () => {\n const postalCode = form.getFieldValue(postalCodeField);\n if (postalCode) {\n await doLookup(postalCode);\n }\n };\n\n return (\n <>\n {/* 郵便番号 */}\n <Form.Item\n name={postalCodeField}\n label={getLabel(i18n, postalCodeField, locale)}\n rules={getRule(postalCodeField)}\n required={isRequired(postalCodeField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, postalCodeField, locale)}\n style={{ width: enablePostalLookup && showSearchButton ? 'calc(100% - 110px)' : 150 }}\n onChange={handlePostalCodeChange}\n addonAfter={\n enablePostalLookup &&\n showSearchButton && (\n <Button\n type=\"text\"\n size=\"small\"\n icon={isSearching ? <LoadingOutlined /> : <SearchOutlined />}\n onClick={handleSearchClick}\n disabled={isSearching}\n >\n {getMessage('searchAddress', locale)}\n </Button>\n )\n }\n />\n </Form.Item>\n\n {/* 都道府県 */}\n <Form.Item\n name={prefectureField}\n label={getLabel(i18n, prefectureField, locale)}\n rules={getRule(prefectureField)}\n required={isRequired(prefectureField)}\n >\n {prefectureOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n options={prefectureOptions}\n style={{ width: 200 }}\n showSearch\n optionFilterProp=\"label\"\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, prefectureField, locale)}\n style={{ width: 200 }}\n />\n )}\n </Form.Item>\n\n {/* 市区町村 */}\n <Form.Item\n name={address1Field}\n label={getLabel(i18n, address1Field, locale)}\n rules={getRule(address1Field)}\n required={isRequired(address1Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address1Field, locale)} />\n </Form.Item>\n\n {/* 番地 */}\n <Form.Item\n name={address2Field}\n label={getLabel(i18n, address2Field, locale)}\n rules={getRule(address2Field)}\n required={isRequired(address2Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address2Field, locale)} />\n </Form.Item>\n\n {/* 建物名・部屋番号 */}\n <Form.Item\n name={address3Field}\n label={getLabel(i18n, address3Field, locale)}\n rules={getRule(address3Field)}\n required={isRequired(address3Field)}\n >\n <Input placeholder={getPlaceholder(i18n, address3Field, locale)} />\n </Form.Item>\n </>\n );\n}\n","/**\n * JapaneseBankField - Japanese bank account input component\n *\n * @example\n * ```tsx\n * import { JapaneseBankField } from '@famgia/omnify-react/components';\n *\n * <JapaneseBankField\n * schemas={customerSchemas}\n * i18n={customerI18n}\n * prefix=\"bank\"\n * accountTypeOptions={accountTypeOptions}\n * />\n * ```\n */\nimport { Form, Input, Select, Row, Col } from 'antd';\nimport type { FormInstance } from 'antd';\nimport type { RuleObject } from 'antd/es/form';\nimport { zodRule, isZodRequired } from '../lib/form-validation';\nimport { getZodLocale } from '../lib/zod-i18n';\n\nexport interface I18nConfig {\n fields: Record<string, { label?: Record<string, string>; placeholder?: Record<string, string> }>;\n}\n\nexport interface SelectOption {\n value: string | number;\n label: string;\n}\n\nexport interface JapaneseBankFieldProps {\n /** Form instance (optional) */\n form?: FormInstance;\n /** Zod schemas for validation */\n schemas: Record<string, unknown>;\n /** i18n configuration for labels and placeholders */\n i18n: I18nConfig;\n /** Field name prefix (default: 'bank') */\n prefix?: string;\n /** Account type options. If not provided, a simple input is shown */\n accountTypeOptions?: SelectOption[];\n}\n\nfunction getLabel(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.['en'] ?? field;\n}\n\nfunction getPlaceholder(i18n: I18nConfig, field: string, locale: string): string {\n return i18n.fields[field]?.placeholder?.[locale] ?? i18n.fields[field]?.placeholder?.['en'] ?? '';\n}\n\nexport function JapaneseBankField({\n schemas,\n i18n,\n prefix = 'bank',\n accountTypeOptions,\n}: JapaneseBankFieldProps) {\n const locale = getZodLocale();\n\n const bankCodeField = `${prefix}_bank_code`;\n const bankNameField = `${prefix}_bank_name`;\n const branchCodeField = `${prefix}_branch_code`;\n const branchNameField = `${prefix}_branch_name`;\n const accountTypeField = `${prefix}_account_type`;\n const accountNumberField = `${prefix}_account_number`;\n const accountHolderField = `${prefix}_account_holder`;\n\n const getRule = (field: string): RuleObject[] => {\n const schema = schemas[field];\n if (!schema) return [];\n return [zodRule(schema as any, getLabel(i18n, field, locale))];\n };\n\n // Check if a field is required by examining its Zod schema\n const isRequired = (field: string): boolean => {\n const schema = schemas[field];\n if (!schema) return false;\n return isZodRequired(schema as any);\n };\n\n const bankRequired = isRequired(bankCodeField) || isRequired(bankNameField);\n const branchRequired = isRequired(branchCodeField) || isRequired(branchNameField);\n\n // Short labels\n const codeShortLabel = locale === 'ja' ? 'コード' : 'Code';\n const nameShortLabel = locale === 'ja' ? '名称' : 'Name';\n\n const bankLabel = locale === 'ja' ? '銀行' : 'Bank';\n const branchLabel = locale === 'ja' ? '支店' : 'Branch';\n\n const prefixStyle: React.CSSProperties = {\n color: 'rgba(0, 0, 0, 0.88)',\n fontWeight: 500,\n borderRight: '1px solid #d9d9d9',\n paddingRight: 8,\n marginRight: 4,\n };\n\n return (\n <>\n {/* 銀行コード・銀行名 */}\n <Form.Item label={bankLabel} required={bankRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item name={bankCodeField} rules={getRule(bankCodeField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankCodeField, locale)}\n maxLength={4}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item name={bankNameField} rules={getRule(bankNameField)} style={{ marginBottom: 16 }}>\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, bankNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 支店コード・支店名 */}\n <Form.Item label={branchLabel} required={branchRequired} style={{ marginBottom: 0 }}>\n <Row gutter={8}>\n <Col span={8}>\n <Form.Item\n name={branchCodeField}\n rules={getRule(branchCodeField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{codeShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchCodeField, locale)}\n maxLength={3}\n />\n </Form.Item>\n </Col>\n <Col span={16}>\n <Form.Item\n name={branchNameField}\n rules={getRule(branchNameField)}\n style={{ marginBottom: 16 }}\n >\n <Input\n prefix={<span style={prefixStyle}>{nameShortLabel}</span>}\n placeholder={getPlaceholder(i18n, branchNameField, locale)}\n />\n </Form.Item>\n </Col>\n </Row>\n </Form.Item>\n\n {/* 口座種別 */}\n <Form.Item\n name={accountTypeField}\n label={getLabel(i18n, accountTypeField, locale)}\n rules={getRule(accountTypeField)}\n required={isRequired(accountTypeField)}\n >\n {accountTypeOptions ? (\n <Select\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n options={accountTypeOptions}\n style={{ width: 150 }}\n />\n ) : (\n <Input\n placeholder={getPlaceholder(i18n, accountTypeField, locale)}\n style={{ width: 150 }}\n />\n )}\n </Form.Item>\n\n {/* 口座番号 */}\n <Form.Item\n name={accountNumberField}\n label={getLabel(i18n, accountNumberField, locale)}\n rules={getRule(accountNumberField)}\n required={isRequired(accountNumberField)}\n >\n <Input\n placeholder={getPlaceholder(i18n, accountNumberField, locale)}\n maxLength={7}\n style={{ width: 150 }}\n />\n </Form.Item>\n\n {/* 口座名義 */}\n <Form.Item\n name={accountHolderField}\n label={getLabel(i18n, accountHolderField, locale)}\n rules={getRule(accountHolderField)}\n required={isRequired(accountHolderField)}\n >\n <Input placeholder={getPlaceholder(i18n, accountHolderField, locale)} />\n </Form.Item>\n </>\n );\n}\n"],"mappings":"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","names":["message","Form","Input","Fragment","jsx","jsxs","getLabel","getPlaceholder","Form","Input","Form","Input","Select","Row","Col","Fragment","jsx","jsxs","getLabel","getPlaceholder","Form","Row","Col","Input","Select"]}
package/dist/index.cjs CHANGED
@@ -381,9 +381,9 @@ function JapaneseNameField({
381
381
  }
382
382
 
383
383
  // src/components/JapaneseAddressField.tsx
384
- var import_react = require("react");
385
- var import_antd2 = require("antd");
386
384
  var import_icons = require("@ant-design/icons");
385
+ var import_antd2 = require("antd");
386
+ var import_react = require("react");
387
387
  var import_jsx_runtime2 = require("react/jsx-runtime");
388
388
  function getLabel2(i18n, field, locale) {
389
389
  return i18n.fields[field]?.label?.[locale] ?? i18n.fields[field]?.label?.["en"] ?? field;