@embedpdf/plugin-form 2.15.0 → 3.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +192 -21
  2. package/dist/index.cjs +1416 -2
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +277 -0
  5. package/dist/index.d.ts +277 -1
  6. package/dist/index.js +1398 -1779
  7. package/dist/index.js.map +1 -1
  8. package/package.json +24 -61
  9. package/dist/lib/actions.d.ts +0 -33
  10. package/dist/lib/form-plugin.d.ts +0 -59
  11. package/dist/lib/handlers/checkbox.handler.d.ts +0 -3
  12. package/dist/lib/handlers/combobox.handler.d.ts +0 -3
  13. package/dist/lib/handlers/index.d.ts +0 -5
  14. package/dist/lib/handlers/listbox.handler.d.ts +0 -3
  15. package/dist/lib/handlers/radio-button.handler.d.ts +0 -3
  16. package/dist/lib/handlers/text-field.handler.d.ts +0 -3
  17. package/dist/lib/index.d.ts +0 -10
  18. package/dist/lib/manifest.d.ts +0 -4
  19. package/dist/lib/reducer.d.ts +0 -6
  20. package/dist/lib/tools.d.ts +0 -457
  21. package/dist/lib/types.d.ts +0 -98
  22. package/dist/preact/adapter.d.ts +0 -13
  23. package/dist/preact/annotation.d.ts +0 -1
  24. package/dist/preact/core.d.ts +0 -1
  25. package/dist/preact/index.cjs +0 -2
  26. package/dist/preact/index.cjs.map +0 -1
  27. package/dist/preact/index.d.ts +0 -1
  28. package/dist/preact/index.js +0 -1359
  29. package/dist/preact/index.js.map +0 -1
  30. package/dist/react/adapter.d.ts +0 -6
  31. package/dist/react/annotation.d.ts +0 -1
  32. package/dist/react/core.d.ts +0 -1
  33. package/dist/react/index.cjs +0 -2
  34. package/dist/react/index.cjs.map +0 -1
  35. package/dist/react/index.d.ts +0 -1
  36. package/dist/react/index.js +0 -1358
  37. package/dist/react/index.js.map +0 -1
  38. package/dist/shared/components/annotations/form-checkbox.d.ts +0 -12
  39. package/dist/shared/components/annotations/form-combobox.d.ts +0 -12
  40. package/dist/shared/components/annotations/form-listbox.d.ts +0 -12
  41. package/dist/shared/components/annotations/form-radio-button.d.ts +0 -12
  42. package/dist/shared/components/annotations/form-text-field.d.ts +0 -12
  43. package/dist/shared/components/fields/checkbox.d.ts +0 -2
  44. package/dist/shared/components/fields/combobox.d.ts +0 -2
  45. package/dist/shared/components/fields/listbox.d.ts +0 -2
  46. package/dist/shared/components/fields/push-button.d.ts +0 -2
  47. package/dist/shared/components/fields/radio-button.d.ts +0 -2
  48. package/dist/shared/components/fields/style.d.ts +0 -6
  49. package/dist/shared/components/fields/text.d.ts +0 -2
  50. package/dist/shared/components/fill-mode/combobox-fill-mode.d.ts +0 -3
  51. package/dist/shared/components/fill-mode/listbox-fill-mode.d.ts +0 -3
  52. package/dist/shared/components/fill-mode/push-button-fill-mode.d.ts +0 -3
  53. package/dist/shared/components/fill-mode/radio-button-fill-mode.d.ts +0 -3
  54. package/dist/shared/components/fill-mode/text-fill-mode.d.ts +0 -3
  55. package/dist/shared/components/fill-mode/toggle-fill-mode.d.ts +0 -3
  56. package/dist/shared/components/form-renderer-registration.d.ts +0 -5
  57. package/dist/shared/components/form-renderers.d.ts +0 -9
  58. package/dist/shared/components/index.d.ts +0 -2
  59. package/dist/shared/components/render-widget.d.ts +0 -12
  60. package/dist/shared/components/types.d.ts +0 -42
  61. package/dist/shared/hooks/index.d.ts +0 -1
  62. package/dist/shared/hooks/use-form-widget-state.d.ts +0 -12
  63. package/dist/shared/hooks/use-form.d.ts +0 -16
  64. package/dist/shared/index.d.ts +0 -4
  65. package/dist/shared-preact/components/annotations/form-checkbox.d.ts +0 -12
  66. package/dist/shared-preact/components/annotations/form-combobox.d.ts +0 -12
  67. package/dist/shared-preact/components/annotations/form-listbox.d.ts +0 -12
  68. package/dist/shared-preact/components/annotations/form-radio-button.d.ts +0 -12
  69. package/dist/shared-preact/components/annotations/form-text-field.d.ts +0 -12
  70. package/dist/shared-preact/components/fields/checkbox.d.ts +0 -2
  71. package/dist/shared-preact/components/fields/combobox.d.ts +0 -2
  72. package/dist/shared-preact/components/fields/listbox.d.ts +0 -2
  73. package/dist/shared-preact/components/fields/push-button.d.ts +0 -2
  74. package/dist/shared-preact/components/fields/radio-button.d.ts +0 -2
  75. package/dist/shared-preact/components/fields/style.d.ts +0 -6
  76. package/dist/shared-preact/components/fields/text.d.ts +0 -2
  77. package/dist/shared-preact/components/fill-mode/combobox-fill-mode.d.ts +0 -3
  78. package/dist/shared-preact/components/fill-mode/listbox-fill-mode.d.ts +0 -3
  79. package/dist/shared-preact/components/fill-mode/push-button-fill-mode.d.ts +0 -3
  80. package/dist/shared-preact/components/fill-mode/radio-button-fill-mode.d.ts +0 -3
  81. package/dist/shared-preact/components/fill-mode/text-fill-mode.d.ts +0 -3
  82. package/dist/shared-preact/components/fill-mode/toggle-fill-mode.d.ts +0 -3
  83. package/dist/shared-preact/components/form-renderer-registration.d.ts +0 -5
  84. package/dist/shared-preact/components/form-renderers.d.ts +0 -9
  85. package/dist/shared-preact/components/index.d.ts +0 -2
  86. package/dist/shared-preact/components/render-widget.d.ts +0 -12
  87. package/dist/shared-preact/components/types.d.ts +0 -42
  88. package/dist/shared-preact/hooks/index.d.ts +0 -1
  89. package/dist/shared-preact/hooks/use-form-widget-state.d.ts +0 -12
  90. package/dist/shared-preact/hooks/use-form.d.ts +0 -16
  91. package/dist/shared-preact/index.d.ts +0 -4
  92. package/dist/shared-react/components/annotations/form-checkbox.d.ts +0 -12
  93. package/dist/shared-react/components/annotations/form-combobox.d.ts +0 -12
  94. package/dist/shared-react/components/annotations/form-listbox.d.ts +0 -12
  95. package/dist/shared-react/components/annotations/form-radio-button.d.ts +0 -12
  96. package/dist/shared-react/components/annotations/form-text-field.d.ts +0 -12
  97. package/dist/shared-react/components/fields/checkbox.d.ts +0 -2
  98. package/dist/shared-react/components/fields/combobox.d.ts +0 -2
  99. package/dist/shared-react/components/fields/listbox.d.ts +0 -2
  100. package/dist/shared-react/components/fields/push-button.d.ts +0 -2
  101. package/dist/shared-react/components/fields/radio-button.d.ts +0 -2
  102. package/dist/shared-react/components/fields/style.d.ts +0 -6
  103. package/dist/shared-react/components/fields/text.d.ts +0 -2
  104. package/dist/shared-react/components/fill-mode/combobox-fill-mode.d.ts +0 -3
  105. package/dist/shared-react/components/fill-mode/listbox-fill-mode.d.ts +0 -3
  106. package/dist/shared-react/components/fill-mode/push-button-fill-mode.d.ts +0 -3
  107. package/dist/shared-react/components/fill-mode/radio-button-fill-mode.d.ts +0 -3
  108. package/dist/shared-react/components/fill-mode/text-fill-mode.d.ts +0 -3
  109. package/dist/shared-react/components/fill-mode/toggle-fill-mode.d.ts +0 -3
  110. package/dist/shared-react/components/form-renderer-registration.d.ts +0 -5
  111. package/dist/shared-react/components/form-renderers.d.ts +0 -9
  112. package/dist/shared-react/components/index.d.ts +0 -2
  113. package/dist/shared-react/components/render-widget.d.ts +0 -12
  114. package/dist/shared-react/components/types.d.ts +0 -42
  115. package/dist/shared-react/hooks/index.d.ts +0 -1
  116. package/dist/shared-react/hooks/use-form-widget-state.d.ts +0 -12
  117. package/dist/shared-react/hooks/use-form.d.ts +0 -16
  118. package/dist/shared-react/index.d.ts +0 -4
  119. package/dist/svelte/components/FormRendererRegistration.svelte.d.ts +0 -18
  120. package/dist/svelte/components/RenderWidget.svelte.d.ts +0 -11
  121. package/dist/svelte/components/annotations/FormCheckbox.svelte.d.ts +0 -5
  122. package/dist/svelte/components/annotations/FormCombobox.svelte.d.ts +0 -5
  123. package/dist/svelte/components/annotations/FormListbox.svelte.d.ts +0 -5
  124. package/dist/svelte/components/annotations/FormRadioButton.svelte.d.ts +0 -5
  125. package/dist/svelte/components/annotations/FormTextField.svelte.d.ts +0 -5
  126. package/dist/svelte/components/fields/ComboboxField.svelte.d.ts +0 -4
  127. package/dist/svelte/components/fields/ListboxField.svelte.d.ts +0 -4
  128. package/dist/svelte/components/fields/TextField.svelte.d.ts +0 -4
  129. package/dist/svelte/components/fill-mode/ComboboxFillMode.svelte.d.ts +0 -5
  130. package/dist/svelte/components/fill-mode/ListboxFillMode.svelte.d.ts +0 -5
  131. package/dist/svelte/components/fill-mode/RadioButtonFillMode.svelte.d.ts +0 -5
  132. package/dist/svelte/components/fill-mode/TextFillMode.svelte.d.ts +0 -5
  133. package/dist/svelte/components/fill-mode/ToggleFillMode.svelte.d.ts +0 -5
  134. package/dist/svelte/components/form-renderers.d.ts +0 -9
  135. package/dist/svelte/components/previews/CheckboxPreview.svelte.d.ts +0 -9
  136. package/dist/svelte/components/previews/ListboxPreview.svelte.d.ts +0 -9
  137. package/dist/svelte/components/previews/RadioButtonPreview.svelte.d.ts +0 -9
  138. package/dist/svelte/components/previews/TextFieldPreview.svelte.d.ts +0 -9
  139. package/dist/svelte/hooks/index.d.ts +0 -2
  140. package/dist/svelte/hooks/use-form-widget-state.svelte.d.ts +0 -12
  141. package/dist/svelte/hooks/use-form.svelte.d.ts +0 -14
  142. package/dist/svelte/index.cjs +0 -2
  143. package/dist/svelte/index.cjs.map +0 -1
  144. package/dist/svelte/index.d.ts +0 -3
  145. package/dist/svelte/index.js +0 -1592
  146. package/dist/svelte/index.js.map +0 -1
  147. package/dist/vue/components/annotations/form-checkbox.vue.d.ts +0 -6
  148. package/dist/vue/components/annotations/form-combobox.vue.d.ts +0 -6
  149. package/dist/vue/components/annotations/form-listbox.vue.d.ts +0 -6
  150. package/dist/vue/components/annotations/form-radio-button.vue.d.ts +0 -6
  151. package/dist/vue/components/annotations/form-text-field.vue.d.ts +0 -6
  152. package/dist/vue/components/fields/combobox-field.vue.d.ts +0 -4
  153. package/dist/vue/components/fields/listbox-field.vue.d.ts +0 -4
  154. package/dist/vue/components/fields/style.d.ts +0 -6
  155. package/dist/vue/components/fields/text-field.vue.d.ts +0 -4
  156. package/dist/vue/components/fill-mode/combobox-fill-mode.vue.d.ts +0 -6
  157. package/dist/vue/components/fill-mode/listbox-fill-mode.vue.d.ts +0 -6
  158. package/dist/vue/components/fill-mode/radio-button-fill-mode.vue.d.ts +0 -6
  159. package/dist/vue/components/fill-mode/text-fill-mode.vue.d.ts +0 -6
  160. package/dist/vue/components/fill-mode/toggle-fill-mode.vue.d.ts +0 -6
  161. package/dist/vue/components/form-renderer-registration.vue.d.ts +0 -13
  162. package/dist/vue/components/form-renderers.d.ts +0 -3
  163. package/dist/vue/components/previews/checkbox-preview.vue.d.ts +0 -10
  164. package/dist/vue/components/previews/listbox-preview.vue.d.ts +0 -10
  165. package/dist/vue/components/previews/radio-button-preview.vue.d.ts +0 -10
  166. package/dist/vue/components/previews/text-field-preview.vue.d.ts +0 -10
  167. package/dist/vue/components/render-widget.vue.d.ts +0 -15
  168. package/dist/vue/hooks/index.d.ts +0 -2
  169. package/dist/vue/hooks/use-form-widget-state.d.ts +0 -12
  170. package/dist/vue/hooks/use-form.d.ts +0 -12
  171. package/dist/vue/index.cjs +0 -2
  172. package/dist/vue/index.cjs.map +0 -1
  173. package/dist/vue/index.d.ts +0 -3
  174. package/dist/vue/index.js +0 -1643
  175. package/dist/vue/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/preact/adapter.ts","../../src/shared/components/annotations/form-text-field.tsx","../../src/shared/components/annotations/form-checkbox.tsx","../../src/shared/components/annotations/form-radio-button.tsx","../../src/shared/components/annotations/form-combobox.tsx","../../src/shared/components/annotations/form-listbox.tsx","../../src/shared/hooks/use-form.ts","../../src/shared/hooks/use-form-widget-state.ts","../../src/shared/components/render-widget.tsx","../../src/shared/components/fields/style.ts","../../src/shared/components/fields/text.tsx","../../src/shared/components/fill-mode/text-fill-mode.tsx","../../src/shared/components/fill-mode/toggle-fill-mode.tsx","../../src/shared/components/fill-mode/radio-button-fill-mode.tsx","../../src/shared/components/fields/combobox.tsx","../../src/shared/components/fill-mode/combobox-fill-mode.tsx","../../src/shared/components/fields/listbox.tsx","../../src/shared/components/fill-mode/listbox-fill-mode.tsx","../../src/shared/components/form-renderers.tsx","../../src/shared/components/form-renderer-registration.tsx","../../src/shared/index.ts"],"sourcesContent":["export { Fragment } from 'preact';\nexport { useEffect, useRef, useState, useCallback, useMemo } from 'preact/hooks';\nexport type { ComponentChildren as ReactNode } from 'preact';\n\nexport type CSSProperties = import('preact').JSX.CSSProperties;\nexport type HTMLAttributes<T = any> = import('preact').JSX.HTMLAttributes<\n T extends EventTarget ? T : never\n>;\nexport type FormEvent<T extends EventTarget = Element> = import('preact').JSX.TargetedEvent<\n T,\n Event\n>;\nexport type MouseEvent<T = Element> = import('preact').JSX.TargetedMouseEvent<\n T extends EventTarget ? T : never\n>;\n\n// Preact-specific select props\nexport const selectProps = (isMultiple: boolean, selectedValues: string[]) => ({\n value: isMultiple ? undefined : selectedValues[0] || '',\n});\n\nexport const optionProps = (\n isMultiple: boolean,\n selectedValues: string[],\n optionValue: string,\n) => ({\n selected: isMultiple ? selectedValues.includes(optionValue) : undefined,\n});\n","import { CSSProperties, MouseEvent, useState } from '@framework';\nimport {\n PdfWidgetAnnoObject,\n PDF_FORM_FIELD_TYPE,\n PDF_FORM_FIELD_FLAG,\n PdfTextWidgetAnnoField,\n standardFontCssProperties,\n} from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface FormTextFieldProps {\n annotation: TrackedAnnotation<PdfWidgetAnnoObject>;\n isSelected: boolean;\n scale: number;\n pageIndex: number;\n onClick?: (e: MouseEvent<Element>) => void;\n style?: CSSProperties;\n}\n\nexport function FormTextField({\n annotation,\n isSelected,\n scale,\n onClick,\n style,\n}: FormTextFieldProps) {\n const [isHovered, setIsHovered] = useState(false);\n const { object } = annotation;\n\n const field = object.field;\n const isTextField = field.type === PDF_FORM_FIELD_TYPE.TEXTFIELD;\n const value = isTextField ? field.value : '';\n\n const isComb =\n isTextField &&\n !!(field.flag & PDF_FORM_FIELD_FLAG.TEXT_COMB) &&\n !!(field as PdfTextWidgetAnnoField).maxLen;\n const isMultiline = isTextField && !!(field.flag & PDF_FORM_FIELD_FLAG.TEXT_MULTIPLINE);\n const maxLen = isTextField ? (field as PdfTextWidgetAnnoField).maxLen : undefined;\n\n const borderWidth = (object.strokeWidth ?? 1) * scale;\n const fontStyle: CSSProperties = {\n fontSize: (object.fontSize ?? 12) * scale,\n ...standardFontCssProperties(object.fontFamily),\n color: object.fontColor ?? '#000000',\n lineHeight: 1.2,\n };\n\n return (\n <div\n onPointerDown={!isSelected ? onClick : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: 'absolute',\n inset: 0,\n background: object.color ?? 'rgba(255, 255, 255, 0.9)',\n border: `${borderWidth}px solid ${object.strokeColor ?? 'rgba(0, 0, 0, 0.2)'}`,\n outline: isHovered || isSelected ? '1px solid rgba(66, 133, 244, 0.5)' : 'none',\n outlineOffset: -1,\n boxSizing: 'border-box',\n pointerEvents: 'auto',\n cursor: isSelected ? 'move' : 'pointer',\n display: 'flex',\n alignItems: isMultiline ? 'flex-start' : 'center',\n overflow: 'hidden',\n ...(!isComb ? { padding: `${borderWidth}px ${borderWidth}px` } : {}),\n ...style,\n }}\n >\n {isComb && maxLen ? (\n <CombPreview\n value={value ?? ''}\n maxLen={maxLen}\n scale={scale}\n width={object.rect.size.width}\n fontStyle={fontStyle}\n strokeColor={object.strokeColor ?? 'rgba(0, 0, 0, 0.2)'}\n />\n ) : (\n <span\n style={{\n ...fontStyle,\n display: 'block',\n width: '100%',\n whiteSpace: isMultiline ? 'pre-wrap' : 'nowrap',\n wordBreak: isMultiline ? 'break-word' : 'normal',\n overflowWrap: isMultiline ? 'break-word' : 'normal',\n overflow: 'hidden',\n textOverflow: isMultiline ? 'clip' : 'ellipsis',\n }}\n >\n {value}\n </span>\n )}\n </div>\n );\n}\n\nfunction CombPreview({\n value,\n maxLen,\n scale,\n width,\n fontStyle,\n strokeColor,\n}: {\n value: string;\n maxLen: number;\n scale: number;\n width: number;\n fontStyle: CSSProperties;\n strokeColor: string;\n}) {\n const cellWidth = (width * scale) / maxLen;\n const chars = value.split('');\n\n return (\n <div style={{ position: 'relative', width: '100%', height: '100%' }}>\n {Array.from({ length: maxLen }).map((_, i) => (\n <span\n key={i}\n style={{\n position: 'absolute',\n top: 0,\n left: i * cellWidth,\n width: cellWidth,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: i < maxLen - 1 ? `1px solid ${strokeColor}` : 'none',\n boxSizing: 'border-box',\n ...fontStyle,\n }}\n >\n {chars[i] || ''}\n </span>\n ))}\n </div>\n );\n}\n","import { CSSProperties, MouseEvent, useState } from '@framework';\nimport { PdfWidgetAnnoObject, isWidgetChecked } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface FormCheckboxProps {\n annotation: TrackedAnnotation<PdfWidgetAnnoObject>;\n isSelected: boolean;\n scale: number;\n pageIndex: number;\n onClick?: (e: MouseEvent<Element>) => void;\n style?: CSSProperties;\n}\n\nexport function FormCheckbox({ annotation, isSelected, scale, onClick, style }: FormCheckboxProps) {\n const [isHovered, setIsHovered] = useState(false);\n const { object } = annotation;\n\n const isChecked = isWidgetChecked(object);\n\n return (\n <div\n onPointerDown={!isSelected ? onClick : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: 'absolute',\n inset: 0,\n background: object.color ?? '#FFFFFF',\n border: `${(object.strokeWidth ?? 1) * scale}px solid ${object.strokeColor ?? '#000000'}`,\n outline: isHovered || isSelected ? '1px solid rgba(66, 133, 244, 0.5)' : 'none',\n outlineOffset: -1,\n boxSizing: 'border-box',\n pointerEvents: 'auto',\n cursor: isSelected ? 'move' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...style,\n }}\n >\n {isChecked && (\n <svg\n viewBox=\"0 0 100 100\"\n style={{\n width: '100%',\n height: '100%',\n }}\n >\n <path\n d=\"M28 48C27.45 50.21 29.45 63.13 30 67C30.55 69.21 34.58 72 39 72C44.52 71.45 76.55 32.55 76 32C77.1 31.45 76 25 76 25C74.34 22.24 68 25.45 68 26C68 26 43.55 53 43 53C41.34 53 40.55 41.1 40 40C33.37 36.69 29.1 45.79 28 48Z\"\n fill=\"#000000\"\n />\n </svg>\n )}\n </div>\n );\n}\n","import { CSSProperties, MouseEvent, useState } from '@framework';\nimport { PdfWidgetAnnoObject, isWidgetChecked } from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface FormRadioButtonProps {\n annotation: TrackedAnnotation<PdfWidgetAnnoObject>;\n isSelected: boolean;\n scale: number;\n pageIndex: number;\n onClick?: (e: MouseEvent<Element>) => void;\n style?: CSSProperties;\n}\n\nexport function FormRadioButton({\n annotation,\n isSelected,\n scale,\n onClick,\n style,\n}: FormRadioButtonProps) {\n const [isHovered, setIsHovered] = useState(false);\n const { object } = annotation;\n\n const isChecked = isWidgetChecked(object);\n\n return (\n <div\n onPointerDown={!isSelected ? onClick : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: 'absolute',\n inset: 0,\n background: object.color ?? '#FFFFFF',\n border: `${(object.strokeWidth ?? 1) * scale}px solid ${object.strokeColor ?? '#000000'}`,\n borderRadius: '50%',\n outline: isHovered || isSelected ? '1px solid rgba(66, 133, 244, 0.5)' : 'none',\n outlineOffset: -1,\n boxSizing: 'border-box',\n pointerEvents: 'auto',\n cursor: isSelected ? 'move' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n ...style,\n }}\n >\n {isChecked && (\n <div\n style={{\n width: '50%',\n height: '50%',\n borderRadius: '50%',\n background: '#000000',\n }}\n />\n )}\n </div>\n );\n}\n","import { CSSProperties, MouseEvent, useState } from '@framework';\nimport {\n PdfWidgetAnnoObject,\n PDF_FORM_FIELD_TYPE,\n standardFontCssProperties,\n} from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface FormComboboxProps {\n annotation: TrackedAnnotation<PdfWidgetAnnoObject>;\n isSelected: boolean;\n scale: number;\n pageIndex: number;\n onClick?: (e: MouseEvent<Element>) => void;\n style?: CSSProperties;\n}\n\nexport function FormCombobox({ annotation, isSelected, scale, onClick, style }: FormComboboxProps) {\n const [isHovered, setIsHovered] = useState(false);\n const { object } = annotation;\n\n const field = object.field;\n const options = field.type === PDF_FORM_FIELD_TYPE.COMBOBOX ? field.options : [];\n const selectedLabel = options.find((o) => o.isSelected)?.label ?? '';\n const borderWidth = (object.strokeWidth ?? 1) * scale;\n const fontSize = (object.fontSize ?? 12) * scale;\n\n return (\n <div\n onPointerDown={!isSelected ? onClick : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: 'absolute',\n inset: 0,\n background: object.color ?? '#FFFFFF',\n border: `${borderWidth}px solid ${object.strokeColor ?? '#000000'}`,\n outline: isHovered || isSelected ? '1px solid rgba(66, 133, 244, 0.5)' : 'none',\n outlineOffset: -1,\n boxSizing: 'border-box',\n pointerEvents: 'auto',\n cursor: isSelected ? 'move' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n ...style,\n }}\n >\n <span\n style={{\n flex: 1,\n padding: `0 ${4 * scale}px`,\n fontSize,\n ...standardFontCssProperties(object.fontFamily),\n color: object.fontColor ?? '#000000',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {selectedLabel}\n </span>\n <div\n style={{\n width: 13 * scale,\n minWidth: 13 * scale,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderLeft: `1px solid ${object.strokeColor ?? '#000000'}`,\n }}\n >\n <svg viewBox=\"0 0 10 6\" style={{ width: 8 * scale, height: 5 * scale }} fill=\"currentColor\">\n <path d=\"M0 0 L5 6 L10 0 Z\" />\n </svg>\n </div>\n </div>\n );\n}\n","import { CSSProperties, MouseEvent, useState } from '@framework';\nimport {\n PdfWidgetAnnoObject,\n PDF_FORM_FIELD_TYPE,\n standardFontCssProperties,\n} from '@embedpdf/models';\nimport { TrackedAnnotation } from '@embedpdf/plugin-annotation';\n\nexport interface FormListboxProps {\n annotation: TrackedAnnotation<PdfWidgetAnnoObject>;\n isSelected: boolean;\n scale: number;\n pageIndex: number;\n onClick?: (e: MouseEvent<Element>) => void;\n style?: CSSProperties;\n}\n\nexport function FormListbox({ annotation, isSelected, scale, onClick, style }: FormListboxProps) {\n const [isHovered, setIsHovered] = useState(false);\n const { object } = annotation;\n\n const field = object.field;\n const options = field.type === PDF_FORM_FIELD_TYPE.LISTBOX ? field.options : [];\n const borderWidth = (object.strokeWidth ?? 1) * scale;\n const fontSize = (object.fontSize ?? 12) * scale;\n const lineHeight = fontSize * 1.2;\n\n return (\n <div\n onPointerDown={!isSelected ? onClick : undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n position: 'absolute',\n inset: 0,\n background: object.color ?? '#FFFFFF',\n border: `${borderWidth}px solid ${object.strokeColor ?? '#000000'}`,\n outline: isHovered || isSelected ? '1px solid rgba(66, 133, 244, 0.5)' : 'none',\n outlineOffset: -1,\n boxSizing: 'border-box',\n pointerEvents: 'auto',\n cursor: isSelected ? 'move' : 'pointer',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n ...style,\n }}\n >\n {options.map((opt, i) => (\n <div\n key={i}\n style={{\n padding: `0 ${4 * scale}px`,\n fontSize,\n lineHeight: `${lineHeight}px`,\n ...standardFontCssProperties(object.fontFamily),\n color: opt.isSelected ? '#FFFFFF' : (object.fontColor ?? '#000000'),\n background: opt.isSelected ? 'rgba(0, 51, 113, 1)' : 'transparent',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {opt.label}\n </div>\n ))}\n </div>\n );\n}\n","import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { useState, useEffect } from '@framework';\nimport { FormPlugin, FormDocumentState, initialDocumentState } from '@embedpdf/plugin-form';\n\nexport const useFormPlugin = () => usePlugin<FormPlugin>(FormPlugin.id);\nexport const useFormCapability = () => useCapability<FormPlugin>(FormPlugin.id);\n\n/**\n * Hook that subscribes to the form plugin's document state for a specific document.\n * Returns selectedFieldId and re-renders when the state changes.\n */\nexport const useFormDocumentState = (documentId: string): FormDocumentState => {\n const { provides } = useFormCapability();\n const [state, setState] = useState<FormDocumentState>(\n provides?.forDocument(documentId)?.getState() ?? { ...initialDocumentState },\n );\n\n useEffect(() => {\n if (!provides) return;\n\n const scope = provides.forDocument(documentId);\n\n // Sync with current state immediately in case it changed between render and effect\n setState(scope.getState());\n\n return scope.onStateChange((newState) => {\n setState(newState);\n });\n }, [provides, documentId]);\n\n return state;\n};\n","import { useCallback, useEffect, useMemo, useState } from '@framework';\nimport { PDF_FORM_FIELD_FLAG, PdfWidgetAnnoField, PdfWidgetAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '@embedpdf/plugin-annotation/@framework';\nimport { useFormCapability } from './use-form';\n\nexport function useFormWidgetState(props: AnnotationRendererProps<PdfWidgetAnnoObject>) {\n const { currentObject: annotation, scale, pageIndex } = props;\n const field = annotation.field;\n const { provides: formProvides } = useFormCapability();\n const [renderKey, setRenderKey] = useState(0);\n\n const isReadOnly = !!(field.flag & PDF_FORM_FIELD_FLAG.READONLY);\n\n const scope = useMemo(\n () => formProvides?.forDocument(props.documentId),\n [formProvides, props.documentId],\n );\n\n useEffect(() => {\n if (!scope) return;\n return scope.onFieldValueChange((event) => {\n if (event.annotationId === annotation.id) {\n setRenderKey((k) => k + 1);\n }\n });\n }, [scope, annotation.id]);\n\n const handleChangeField = useCallback(\n (newField: PdfWidgetAnnoField) => {\n if (!scope) return;\n scope.setFormFieldValues(pageIndex, annotation, newField);\n },\n [scope, pageIndex, annotation],\n );\n\n return { annotation, field, scale, pageIndex, scope, handleChangeField, renderKey, isReadOnly };\n}\n","import { Fragment, HTMLAttributes, CSSProperties, useEffect, useRef, useState } from '@framework';\nimport { ignore, PdfErrorCode, PdfWidgetAnnoObject } from '@embedpdf/models';\n\nimport { useFormCapability } from '../hooks/use-form';\n\ntype RenderWidgetProps = Omit<HTMLAttributes<HTMLImageElement>, 'style'> & {\n pageIndex: number;\n annotation: PdfWidgetAnnoObject;\n scaleFactor?: number;\n dpr?: number;\n renderKey?: number;\n style?: CSSProperties;\n};\n\nexport function RenderWidget({\n pageIndex,\n annotation,\n scaleFactor = 1,\n renderKey = 0,\n style,\n ...props\n}: RenderWidgetProps) {\n const { provides: formProvides } = useFormCapability();\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const urlRef = useRef<string | null>(null);\n\n const { width, height } = annotation.rect.size;\n\n useEffect(() => {\n if (!formProvides) return;\n\n const task = formProvides.renderWidget({\n pageIndex,\n annotation,\n options: {\n scaleFactor,\n dpr: window.devicePixelRatio,\n },\n });\n\n task.wait((blob) => {\n const url = URL.createObjectURL(blob);\n if (urlRef.current) {\n URL.revokeObjectURL(urlRef.current);\n }\n urlRef.current = url;\n setImageUrl(url);\n }, ignore);\n\n return () => {\n task.abort({\n code: PdfErrorCode.Cancelled,\n message: 'canceled render task',\n });\n };\n }, [pageIndex, scaleFactor, formProvides, annotation.id, width, height, renderKey]);\n\n useEffect(() => {\n return () => {\n if (urlRef.current) {\n URL.revokeObjectURL(urlRef.current);\n urlRef.current = null;\n }\n };\n }, []);\n\n return (\n <Fragment>\n {imageUrl && (\n <img\n src={imageUrl}\n {...props}\n style={{\n width: '100%',\n height: '100%',\n display: 'block',\n ...(style || {}),\n }}\n />\n )}\n </Fragment>\n );\n}\n","import { CSSProperties } from '@framework';\n\nconst baseStyle: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n padding: 0,\n margin: 0,\n width: '100%',\n height: '100%',\n};\n\nconst baseInputStyle: CSSProperties = {\n ...baseStyle,\n borderRadius: 0,\n outline: 'none',\n boxSizing: 'border-box',\n};\n\nexport const checkboxStyle: CSSProperties = {\n ...baseStyle,\n borderRadius: 0,\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderStyle: 'none',\n outline: 'none',\n};\n\nexport const inputStyle: CSSProperties = baseInputStyle;\n\nexport const selectStyle: CSSProperties = {\n ...baseInputStyle,\n cursor: 'inherit',\n};\n\nexport const textareaStyle: CSSProperties = {\n ...baseInputStyle,\n resize: 'none',\n lineHeight: 1.14,\n};\n\nexport const buttonStyle: CSSProperties = baseStyle;\n","import { PDF_FORM_FIELD_FLAG, standardFontCssProperties } from '@embedpdf/models';\nimport { CSSProperties, FormEvent, useCallback, useEffect, useMemo, useState } from '@framework';\nimport { useIOSZoomPrevention } from '@embedpdf/plugin-annotation/@framework';\n\nimport { TextFieldProps } from '../types';\nimport { inputStyle, textareaStyle } from './style';\n\nconst combContainerStyle: CSSProperties = {\n position: 'relative',\n width: '100%',\n height: '100%',\n borderRadius: 0,\n boxSizing: 'border-box',\n};\n\nconst combHiddenInputStyle: CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n opacity: 0,\n padding: 0,\n margin: 0,\n border: 'none',\n zIndex: 1,\n};\n\nconst combCellStyle: CSSProperties = {\n position: 'absolute',\n top: 0,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n};\n\nconst combCaretStyle: CSSProperties = {\n position: 'absolute',\n top: '15%',\n height: '70%',\n width: 1,\n backgroundColor: 'black',\n pointerEvents: 'none',\n};\n\ninterface CombFieldProps {\n inputRef: (el: HTMLInputElement | null) => void;\n required: boolean;\n disabled: boolean;\n password: boolean;\n name: string;\n value: string;\n maxLen: number;\n cellWidth: number;\n chars: string[];\n caretIndex: number;\n containerStyle: CSSProperties;\n cellFontStyle: CSSProperties;\n onFocus?: () => void;\n onChange: (evt: FormEvent) => void;\n onBlur?: () => void;\n}\n\nfunction CombField(props: CombFieldProps) {\n const {\n inputRef,\n required,\n disabled,\n password,\n name,\n value,\n maxLen,\n cellWidth,\n chars,\n caretIndex,\n containerStyle,\n cellFontStyle,\n onFocus,\n onChange,\n onBlur,\n } = props;\n\n const [caretVisible, setCaretVisible] = useState(true);\n\n useEffect(() => {\n setCaretVisible(true);\n const id = setInterval(() => setCaretVisible((v) => !v), 530);\n return () => clearInterval(id);\n }, [caretIndex]);\n\n const showCaret = caretIndex < maxLen;\n\n return (\n <div style={containerStyle}>\n <input\n ref={inputRef}\n required={required}\n disabled={disabled}\n type={password ? 'password' : 'text'}\n name={name}\n aria-label={name}\n value={value}\n maxLength={maxLen}\n onFocus={onFocus}\n onChange={onChange}\n onBlur={onBlur}\n style={combHiddenInputStyle}\n />\n {Array.from({ length: maxLen }).map((_, i) => (\n <span\n key={i}\n style={{\n ...combCellStyle,\n ...cellFontStyle,\n left: i * cellWidth,\n width: cellWidth,\n }}\n >\n {chars[i] || ''}\n </span>\n ))}\n {showCaret && (\n <span\n style={{\n ...combCaretStyle,\n left: caretIndex * cellWidth + cellWidth / 2,\n opacity: caretVisible ? 1 : 0,\n }}\n />\n )}\n </div>\n );\n}\n\nexport function TextField(props: TextFieldProps) {\n const {\n annotation,\n isEditable,\n onChangeField,\n onFocus,\n onBlur,\n inputRef,\n scale,\n syncExternalValue = true,\n } = props;\n const field = annotation.field;\n\n const { flag } = field;\n const name = field.name;\n const value = field.value;\n\n const [localValue, setLocalValue] = useState(value);\n\n useEffect(() => {\n if (!syncExternalValue) return;\n setLocalValue(value);\n }, [value, syncExternalValue]);\n\n const changeValue = useCallback(\n (evt: FormEvent) => {\n const newValue = (evt.target as HTMLInputElement).value;\n setLocalValue(newValue);\n onChangeField?.({ ...field, value: newValue });\n },\n [onChangeField, field],\n );\n\n const bw = (annotation.strokeWidth ?? 0) * scale;\n const fontCss = standardFontCssProperties(annotation.fontFamily);\n const { adjustedFontPx, wrapperStyle } = useIOSZoomPrevention(annotation.fontSize * scale, true);\n\n const visualStyle: CSSProperties = useMemo(\n () => ({\n backgroundColor: annotation.color ?? 'transparent',\n borderStyle: 'solid',\n borderColor: annotation.strokeColor ?? 'transparent',\n borderWidth: bw,\n color: annotation.fontColor,\n ...fontCss,\n fontSize: adjustedFontPx,\n padding: `${bw}px ${bw}px`,\n }),\n [annotation.color, annotation.strokeColor, annotation.fontColor, adjustedFontPx, bw, fontCss],\n );\n\n const isDisabled = !isEditable || !!(flag & PDF_FORM_FIELD_FLAG.READONLY);\n const isRequired = !!(flag & PDF_FORM_FIELD_FLAG.REQUIRED);\n const isPassword = !!(flag & PDF_FORM_FIELD_FLAG.TEXT_PASSWORD);\n const isMultipleLine = !!(flag & PDF_FORM_FIELD_FLAG.TEXT_MULTIPLINE);\n const isComb = !!(flag & PDF_FORM_FIELD_FLAG.TEXT_COMB);\n const maxLen = field.maxLen;\n\n if (isComb && maxLen) {\n const cellWidth = (annotation.rect.size.width * scale) / maxLen;\n const chars = (localValue || '').split('');\n const caretIndex = chars.length;\n\n const combContainer: CSSProperties = {\n ...combContainerStyle,\n backgroundColor: annotation.color ?? 'transparent',\n borderStyle: 'solid',\n borderColor: annotation.strokeColor ?? 'transparent',\n borderWidth: bw,\n };\n\n const cellFont: CSSProperties = {\n color: annotation.fontColor,\n ...fontCss,\n fontSize: adjustedFontPx,\n };\n\n const combContent = (\n <CombField\n inputRef={inputRef as (el: HTMLInputElement | null) => void}\n required={isRequired}\n disabled={isDisabled}\n password={isPassword}\n name={name}\n value={localValue}\n maxLen={maxLen}\n cellWidth={cellWidth}\n chars={chars}\n caretIndex={caretIndex}\n containerStyle={combContainer}\n cellFontStyle={cellFont}\n onFocus={onFocus}\n onChange={changeValue}\n onBlur={onBlur}\n />\n );\n\n return wrapperStyle ? <div style={wrapperStyle}>{combContent}</div> : combContent;\n }\n\n const inputContent = isMultipleLine ? (\n <textarea\n ref={inputRef as (el: HTMLTextAreaElement | null) => void}\n required={isRequired}\n disabled={isDisabled}\n name={name}\n aria-label={name}\n value={localValue}\n maxLength={maxLen}\n onFocus={onFocus}\n onChange={changeValue}\n onBlur={onBlur}\n style={{ ...textareaStyle, ...visualStyle }}\n />\n ) : (\n <input\n ref={inputRef as (el: HTMLInputElement | null) => void}\n required={isRequired}\n disabled={isDisabled}\n type={isPassword ? 'password' : 'text'}\n name={name}\n aria-label={name}\n value={localValue}\n maxLength={maxLen}\n onFocus={onFocus}\n onChange={changeValue}\n onBlur={onBlur}\n style={{ ...inputStyle, ...visualStyle }}\n />\n );\n\n return wrapperStyle ? <div style={wrapperStyle}>{inputContent}</div> : inputContent;\n}\n","import { useCallback, useEffect, useRef, useState } from '@framework';\nimport { PdfWidgetAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '@embedpdf/plugin-annotation/@framework';\nimport { useFormWidgetState } from '../../hooks/use-form-widget-state';\nimport { useFormDocumentState } from '../../hooks/use-form';\nimport { RenderWidget } from '../render-widget';\nimport { TextField } from '../fields/text';\nimport { TextFieldProps } from '../types';\n\nexport function TextFillMode(props: AnnotationRendererProps<PdfWidgetAnnoObject>) {\n const { annotation, scale, pageIndex, scope, handleChangeField, renderKey, isReadOnly } =\n useFormWidgetState(props);\n const formState = useFormDocumentState(props.documentId);\n const [editing, setEditing] = useState(false);\n const inputRef = useRef<HTMLElement | null>(null);\n\n const isFocused = formState.selectedFieldId === annotation.id;\n\n useEffect(() => {\n if (isFocused && inputRef.current && document.activeElement !== inputRef.current) {\n inputRef.current.focus();\n }\n }, [isFocused]);\n\n const handleFocus = useCallback(() => {\n if (isReadOnly) return;\n scope?.selectField(annotation.id);\n setEditing(true);\n }, [isReadOnly, scope, annotation.id]);\n\n const handleBlur = useCallback(() => {\n setEditing(false);\n if (scope?.getSelectedFieldId() === annotation.id) {\n scope?.deselectField();\n }\n }, [scope, annotation.id]);\n\n const handleInputRef = useCallback((el: HTMLElement | null) => {\n inputRef.current = el;\n }, []);\n\n return (\n <div\n style={{\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n pointerEvents: 'auto',\n outline: 'none',\n }}\n >\n <RenderWidget\n pageIndex={pageIndex}\n annotation={annotation}\n scaleFactor={scale}\n renderKey={renderKey}\n style={{\n position: 'absolute',\n inset: 0,\n pointerEvents: 'none',\n visibility: editing ? 'hidden' : 'visible',\n }}\n />\n <div\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: 1,\n opacity: editing ? 1 : 0,\n }}\n >\n <TextField\n annotation={annotation as TextFieldProps['annotation']}\n scale={scale}\n pageIndex={pageIndex}\n isEditable={true}\n onChangeField={handleChangeField}\n syncExternalValue={!editing}\n onFocus={handleFocus}\n onBlur={handleBlur}\n inputRef={handleInputRef}\n />\n </div>\n </div>\n );\n}\n","import { useCallback, useEffect, useRef } from '@framework';\nimport { PdfWidgetAnnoObject, isWidgetChecked } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '@embedpdf/plugin-annotation/@framework';\nimport { useFormWidgetState } from '../../hooks/use-form-widget-state';\nimport { useFormDocumentState } from '../../hooks/use-form';\nimport { RenderWidget } from '../render-widget';\n\nexport function ToggleFillMode(props: AnnotationRendererProps<PdfWidgetAnnoObject>) {\n const { annotation, field, scale, pageIndex, scope, handleChangeField, renderKey, isReadOnly } =\n useFormWidgetState(props);\n const formState = useFormDocumentState(props.documentId);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const isFocused = formState.selectedFieldId === annotation.id;\n\n useEffect(() => {\n if (isFocused && wrapperRef.current && document.activeElement !== wrapperRef.current) {\n wrapperRef.current.focus();\n }\n }, [isFocused]);\n\n const toggle = useCallback(() => {\n if (isReadOnly) return;\n const checked = isWidgetChecked(annotation);\n const newValue = checked ? 'Off' : (annotation.exportValue ?? 'Yes');\n handleChangeField({ ...field, value: newValue });\n }, [isReadOnly, annotation, field, handleChangeField]);\n\n const handleClick = useCallback(() => {\n if (isReadOnly) return;\n scope?.selectField(annotation.id);\n toggle();\n }, [isReadOnly, scope, annotation.id, toggle]);\n\n const handleFocus = useCallback(() => {\n if (isReadOnly) return;\n scope?.selectField(annotation.id);\n }, [isReadOnly, scope, annotation.id]);\n\n const handleBlur = useCallback(() => {\n if (scope?.getSelectedFieldId() === annotation.id) {\n scope?.deselectField();\n }\n }, [scope, annotation.id]);\n\n const handleKeyDown = useCallback(\n (e: { key: string; preventDefault: () => void }) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n toggle();\n }\n },\n [toggle],\n );\n\n return (\n <div\n ref={wrapperRef}\n tabIndex={isReadOnly ? -1 : 0}\n onClick={handleClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n style={{\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n cursor: isReadOnly ? 'default' : 'pointer',\n pointerEvents: 'auto',\n outline: isFocused ? '2px solid rgba(66, 133, 244, 0.8)' : 'none',\n outlineOffset: -2,\n }}\n >\n <RenderWidget\n pageIndex={pageIndex}\n annotation={annotation}\n scaleFactor={scale}\n renderKey={renderKey}\n style={{ pointerEvents: 'none' }}\n />\n </div>\n );\n}\n","import { useCallback, useEffect, useRef } from '@framework';\nimport { PdfWidgetAnnoObject, isWidgetChecked } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '@embedpdf/plugin-annotation/@framework';\nimport { useFormWidgetState } from '../../hooks/use-form-widget-state';\nimport { useFormDocumentState } from '../../hooks/use-form';\nimport { RenderWidget } from '../render-widget';\n\nexport function RadioButtonFillMode(props: AnnotationRendererProps<PdfWidgetAnnoObject>) {\n const { annotation, field, scale, pageIndex, scope, handleChangeField, renderKey, isReadOnly } =\n useFormWidgetState(props);\n const formState = useFormDocumentState(props.documentId);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const isFocused = formState.selectedFieldId === annotation.id;\n\n useEffect(() => {\n if (isFocused && wrapperRef.current && document.activeElement !== wrapperRef.current) {\n wrapperRef.current.focus();\n }\n }, [isFocused]);\n\n const selectRadio = useCallback(() => {\n if (isReadOnly) return;\n if (!isWidgetChecked(annotation) && annotation.exportValue) {\n handleChangeField({ ...field, value: annotation.exportValue });\n }\n }, [isReadOnly, annotation, field, handleChangeField]);\n\n const handleClick = useCallback(() => {\n if (isReadOnly) return;\n scope?.selectField(annotation.id);\n selectRadio();\n }, [isReadOnly, scope, annotation.id, selectRadio]);\n\n const handleFocus = useCallback(() => {\n if (isReadOnly) return;\n scope?.selectField(annotation.id);\n }, [isReadOnly, scope, annotation.id]);\n\n const handleBlur = useCallback(() => {\n if (scope?.getSelectedFieldId() === annotation.id) {\n scope?.deselectField();\n }\n }, [scope, annotation.id]);\n\n const handleKeyDown = useCallback(\n (e: { key: string; preventDefault: () => void }) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n selectRadio();\n }\n },\n [selectRadio],\n );\n\n return (\n <div\n ref={wrapperRef}\n tabIndex={isReadOnly ? -1 : 0}\n onClick={handleClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n style={{\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n cursor: isReadOnly ? 'default' : 'pointer',\n pointerEvents: 'auto',\n outline: isFocused ? '2px solid rgba(66, 133, 244, 0.8)' : 'none',\n outlineOffset: -2,\n }}\n >\n <RenderWidget\n pageIndex={pageIndex}\n annotation={annotation}\n scaleFactor={scale}\n renderKey={renderKey}\n style={{ pointerEvents: 'none' }}\n />\n </div>\n );\n}\n","import { PdfWidgetAnnoOption, PDF_FORM_FIELD_FLAG } from '@embedpdf/models';\nimport { FormEvent, useCallback, selectProps, optionProps } from '@framework';\n\nimport { ComboboxFieldProps } from '../types';\nimport { selectStyle } from './style';\n\nexport function ComboboxField(props: ComboboxFieldProps) {\n const { annotation, isEditable, onChangeField, onBlur, inputRef } = props;\n const field = annotation.field;\n\n const { flag, options } = field;\n const name = field.alternateName || field.name;\n\n const isDisabled = !isEditable || !!(flag & PDF_FORM_FIELD_FLAG.READONLY);\n const isRequired = !!(flag & PDF_FORM_FIELD_FLAG.REQUIRED);\n\n const handleChange = useCallback(\n (evt: FormEvent) => {\n const select = evt.target as HTMLSelectElement;\n const updatedOptions = options.map((opt, i) => ({\n ...opt,\n isSelected: i === select.selectedIndex,\n }));\n onChangeField?.({ ...field, options: updatedOptions });\n },\n [onChangeField, field, options],\n );\n\n const selectedTexts = options.filter((opt) => opt.isSelected).map((opt) => opt.label);\n\n return (\n <select\n ref={inputRef as (el: HTMLSelectElement | null) => void}\n required={isRequired}\n disabled={isDisabled}\n name={name}\n aria-label={name}\n {...selectProps(false, selectedTexts)}\n onChange={handleChange}\n onBlur={onBlur}\n style={{ ...selectStyle, opacity: 0 }}\n >\n {options.map((option: PdfWidgetAnnoOption, index) => {\n return (\n <option\n key={index}\n value={option.label}\n {...optionProps(false, selectedTexts, option.label)}\n >\n {option.label}\n </option>\n );\n })}\n </select>\n );\n}\n","import { useCallback, useEffect, useRef } from '@framework';\nimport { PdfWidgetAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '@embedpdf/plugin-annotation/@framework';\nimport { useFormWidgetState } from '../../hooks/use-form-widget-state';\nimport { useFormDocumentState } from '../../hooks/use-form';\nimport { RenderWidget } from '../render-widget';\nimport { ComboboxField } from '../fields/combobox';\nimport { ComboboxFieldProps } from '../types';\n\nexport function ComboboxFillMode(props: AnnotationRendererProps<PdfWidgetAnnoObject>) {\n const { annotation, scale, pageIndex, scope, handleChangeField, renderKey, isReadOnly } =\n useFormWidgetState(props);\n const formState = useFormDocumentState(props.documentId);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const selectElRef = useRef<HTMLElement | null>(null);\n\n const isFocused = formState.selectedFieldId === annotation.id;\n\n useEffect(() => {\n if (isFocused && wrapperRef.current && !wrapperRef.current.contains(document.activeElement)) {\n (selectElRef.current ?? wrapperRef.current).focus();\n }\n }, [isFocused]);\n\n const handleFocus = useCallback(() => {\n scope?.selectField(annotation.id);\n }, [scope, annotation.id]);\n\n const handleBlur = useCallback(() => {\n requestAnimationFrame(() => {\n if (wrapperRef.current?.contains(document.activeElement)) return;\n if (scope?.getSelectedFieldId() === annotation.id) {\n scope?.deselectField();\n }\n });\n }, [scope, annotation.id]);\n\n const selectInputRef = useCallback((el: HTMLElement | null) => {\n selectElRef.current = el;\n }, []);\n\n return (\n <div\n ref={wrapperRef}\n onFocus={handleFocus}\n onBlur={handleBlur}\n style={{\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n cursor: isReadOnly ? 'default' : 'pointer',\n pointerEvents: 'auto',\n outline: isFocused ? '2px solid rgba(66, 133, 244, 0.8)' : 'none',\n outlineOffset: -2,\n }}\n >\n <RenderWidget\n pageIndex={pageIndex}\n annotation={annotation}\n scaleFactor={scale}\n renderKey={renderKey}\n style={{ pointerEvents: 'none' }}\n />\n <ComboboxField\n annotation={annotation as ComboboxFieldProps['annotation']}\n scale={scale}\n pageIndex={pageIndex}\n isEditable={true}\n onChangeField={handleChangeField}\n inputRef={selectInputRef}\n />\n </div>\n );\n}\n","import { PDF_FORM_FIELD_FLAG, standardFontCssProperties } from '@embedpdf/models';\nimport { CSSProperties, useCallback, useMemo } from '@framework';\n\nimport { ListboxFieldProps } from '../types';\n\nexport function ListboxField(props: ListboxFieldProps) {\n const { annotation, isEditable, onChangeField, onBlur, inputRef, scale } = props;\n const field = annotation.field;\n\n const { flag, options } = field;\n const isDisabled = !isEditable || !!(flag & PDF_FORM_FIELD_FLAG.READONLY);\n const isMultipleChoice = !!(flag & PDF_FORM_FIELD_FLAG.CHOICE_MULTL_SELECT);\n\n const bw = (annotation.strokeWidth ?? 0) * scale;\n const fontSize = (annotation.fontSize ?? 12) * scale;\n const lineHeight = fontSize * 1.2;\n const fontCss = standardFontCssProperties(annotation.fontFamily);\n\n const containerStyle: CSSProperties = useMemo(\n () => ({\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: annotation.color ?? '#FFFFFF',\n borderStyle: 'solid',\n borderColor: annotation.strokeColor ?? '#000000',\n borderWidth: bw,\n boxSizing: 'border-box',\n overflow: 'auto',\n display: 'flex',\n flexDirection: 'column',\n outline: 'none',\n }),\n [annotation.color, annotation.strokeColor, bw],\n );\n\n const handleOptionClick = useCallback(\n (clickedIndex: number) => {\n if (isDisabled) return;\n const updatedOptions = options.map((opt, i) => ({\n ...opt,\n isSelected: isMultipleChoice\n ? i === clickedIndex\n ? !opt.isSelected\n : opt.isSelected\n : i === clickedIndex,\n }));\n onChangeField?.({ ...field, options: updatedOptions });\n },\n [isDisabled, isMultipleChoice, options, field, onChangeField],\n );\n\n return (\n <div\n ref={inputRef as (el: HTMLDivElement | null) => void}\n onBlur={onBlur}\n style={containerStyle}\n >\n {options.map((opt, i) => (\n <div\n key={i}\n onClick={() => handleOptionClick(i)}\n style={{\n padding: `0 ${4 * scale}px`,\n fontSize,\n lineHeight: `${lineHeight}px`,\n ...fontCss,\n color: opt.isSelected ? '#FFFFFF' : (annotation.fontColor ?? '#000000'),\n background: opt.isSelected ? 'rgba(0, 51, 113, 1)' : 'transparent',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n cursor: isDisabled ? 'default' : 'pointer',\n }}\n >\n {opt.label}\n </div>\n ))}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from '@framework';\nimport { PdfWidgetAnnoObject } from '@embedpdf/models';\nimport { AnnotationRendererProps } from '@embedpdf/plugin-annotation/@framework';\nimport { useFormWidgetState } from '../../hooks/use-form-widget-state';\nimport { useFormDocumentState } from '../../hooks/use-form';\nimport { RenderWidget } from '../render-widget';\nimport { ListboxField } from '../fields/listbox';\nimport { ListboxFieldProps } from '../types';\n\nexport function ListboxFillMode(props: AnnotationRendererProps<PdfWidgetAnnoObject>) {\n const { annotation, scale, pageIndex, scope, handleChangeField, renderKey, isReadOnly } =\n useFormWidgetState(props);\n const formState = useFormDocumentState(props.documentId);\n const [editing, setEditing] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const isFocused = formState.selectedFieldId === annotation.id;\n\n useEffect(() => {\n if (isFocused && wrapperRef.current && !wrapperRef.current.contains(document.activeElement)) {\n wrapperRef.current.focus();\n }\n }, [isFocused]);\n\n const handleFocus = useCallback(() => {\n if (isReadOnly) return;\n scope?.selectField(annotation.id);\n setEditing(true);\n }, [isReadOnly, scope, annotation.id]);\n\n const handleBlur = useCallback(() => {\n requestAnimationFrame(() => {\n if (wrapperRef.current?.contains(document.activeElement)) return;\n setEditing(false);\n if (scope?.getSelectedFieldId() === annotation.id) {\n scope?.deselectField();\n }\n });\n }, [scope, annotation.id]);\n\n return (\n <div\n ref={wrapperRef}\n tabIndex={isReadOnly ? -1 : 0}\n onFocus={handleFocus}\n onBlur={handleBlur}\n style={{\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n cursor: isReadOnly ? 'default' : 'pointer',\n pointerEvents: 'auto',\n outline: isFocused && !editing ? '2px solid rgba(66, 133, 244, 0.8)' : 'none',\n outlineOffset: -2,\n }}\n >\n <ListboxField\n annotation={annotation as ListboxFieldProps['annotation']}\n scale={scale}\n pageIndex={pageIndex}\n isEditable={true}\n onChangeField={handleChangeField}\n />\n {!editing && (\n <RenderWidget\n pageIndex={pageIndex}\n annotation={annotation}\n scaleFactor={scale}\n renderKey={renderKey}\n style={{ pointerEvents: 'none' }}\n />\n )}\n </div>\n );\n}\n","import {\n PdfAnnotationSubtype,\n PdfWidgetAnnoObject,\n PDF_FORM_FIELD_TYPE,\n PdfStandardFont,\n Rect,\n} from '@embedpdf/models';\nimport { createRenderer, BoxedAnnotationRenderer } from '@embedpdf/plugin-annotation/@framework';\nimport { FormTextField } from './annotations/form-text-field';\nimport { FormCheckbox } from './annotations/form-checkbox';\nimport { FormRadioButton } from './annotations/form-radio-button';\nimport { FormCombobox } from './annotations/form-combobox';\nimport { FormListbox } from './annotations/form-listbox';\nimport { TextFillMode } from './fill-mode/text-fill-mode';\nimport { ToggleFillMode } from './fill-mode/toggle-fill-mode';\nimport { RadioButtonFillMode } from './fill-mode/radio-button-fill-mode';\nimport { ComboboxFillMode } from './fill-mode/combobox-fill-mode';\nimport { ListboxFillMode } from './fill-mode/listbox-fill-mode';\n\nexport interface WidgetPreviewData {\n rect: Rect;\n fontFamily?: PdfStandardFont;\n fontSize?: number;\n fontColor?: string;\n}\n\nexport const formRenderers: BoxedAnnotationRenderer[] = [\n createRenderer<PdfWidgetAnnoObject, WidgetPreviewData>({\n id: 'formTextField',\n matches: (a): a is PdfWidgetAnnoObject =>\n a.type === PdfAnnotationSubtype.WIDGET && a.field?.type === PDF_FORM_FIELD_TYPE.TEXTFIELD,\n render: ({ annotation, isSelected, scale, pageIndex, onClick }) => (\n <FormTextField\n annotation={annotation}\n isSelected={isSelected}\n scale={scale}\n pageIndex={pageIndex}\n onClick={onClick}\n />\n ),\n renderPreview: ({ bounds, scale }) => (\n <div\n style={{\n position: 'absolute' as const,\n left: 0,\n top: 0,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n border: '1px dashed rgba(66, 133, 244, 0.6)',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n boxSizing: 'border-box' as const,\n display: 'flex',\n alignItems: 'center',\n padding: `0 ${2 * scale}px`,\n overflow: 'hidden',\n }}\n />\n ),\n interactionDefaults: { isDraggable: false, isResizable: true, isRotatable: false },\n useAppearanceStream: false,\n renderLocked: (props) => <TextFillMode {...props} />,\n }),\n createRenderer<PdfWidgetAnnoObject, WidgetPreviewData>({\n id: 'formCheckbox',\n matches: (a): a is PdfWidgetAnnoObject =>\n a.type === PdfAnnotationSubtype.WIDGET && a.field?.type === PDF_FORM_FIELD_TYPE.CHECKBOX,\n render: ({ annotation, isSelected, scale, pageIndex, onClick }) => (\n <FormCheckbox\n annotation={annotation}\n isSelected={isSelected}\n scale={scale}\n pageIndex={pageIndex}\n onClick={onClick}\n />\n ),\n renderPreview: ({ bounds, scale }) => (\n <div\n style={{\n position: 'absolute' as const,\n left: 0,\n top: 0,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n border: '1px dashed rgba(66, 133, 244, 0.6)',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n boxSizing: 'border-box' as const,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n />\n ),\n interactionDefaults: { isDraggable: false, isResizable: true, isRotatable: false },\n useAppearanceStream: false,\n renderLocked: (props) => <ToggleFillMode {...props} />,\n }),\n createRenderer<PdfWidgetAnnoObject, WidgetPreviewData>({\n id: 'formRadioButton',\n matches: (a): a is PdfWidgetAnnoObject =>\n a.type === PdfAnnotationSubtype.WIDGET && a.field?.type === PDF_FORM_FIELD_TYPE.RADIOBUTTON,\n render: ({ annotation, isSelected, scale, pageIndex, onClick }) => (\n <FormRadioButton\n annotation={annotation}\n isSelected={isSelected}\n scale={scale}\n pageIndex={pageIndex}\n onClick={onClick}\n />\n ),\n renderPreview: ({ bounds, scale }) => (\n <div\n style={{\n position: 'absolute' as const,\n left: 0,\n top: 0,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n border: '1px dashed rgba(66, 133, 244, 0.6)',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n borderRadius: '50%',\n boxSizing: 'border-box' as const,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n />\n ),\n interactionDefaults: { isDraggable: false, isResizable: true, isRotatable: false },\n useAppearanceStream: false,\n renderLocked: (props) => <RadioButtonFillMode {...props} />,\n }),\n createRenderer<PdfWidgetAnnoObject, WidgetPreviewData>({\n id: 'formCombobox',\n matches: (a): a is PdfWidgetAnnoObject =>\n a.type === PdfAnnotationSubtype.WIDGET && a.field?.type === PDF_FORM_FIELD_TYPE.COMBOBOX,\n render: ({ annotation, isSelected, scale, pageIndex, onClick }) => (\n <FormCombobox\n annotation={annotation}\n isSelected={isSelected}\n scale={scale}\n pageIndex={pageIndex}\n onClick={onClick}\n />\n ),\n renderPreview: ({ bounds, scale }) => (\n <div\n style={{\n position: 'absolute' as const,\n left: 0,\n top: 0,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n border: '1px dashed rgba(66, 133, 244, 0.6)',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n boxSizing: 'border-box' as const,\n display: 'flex',\n alignItems: 'center',\n padding: `0 ${2 * scale}px`,\n overflow: 'hidden',\n }}\n />\n ),\n interactionDefaults: { isDraggable: false, isResizable: true, isRotatable: false },\n useAppearanceStream: false,\n renderLocked: (props) => <ComboboxFillMode {...props} />,\n }),\n createRenderer<PdfWidgetAnnoObject, WidgetPreviewData>({\n id: 'formListbox',\n matches: (a): a is PdfWidgetAnnoObject =>\n a.type === PdfAnnotationSubtype.WIDGET && a.field?.type === PDF_FORM_FIELD_TYPE.LISTBOX,\n render: ({ annotation, isSelected, scale, pageIndex, onClick }) => (\n <FormListbox\n annotation={annotation}\n isSelected={isSelected}\n scale={scale}\n pageIndex={pageIndex}\n onClick={onClick}\n />\n ),\n renderPreview: ({ bounds, scale }) => (\n <div\n style={{\n position: 'absolute' as const,\n left: 0,\n top: 0,\n width: bounds.size.width * scale,\n height: bounds.size.height * scale,\n border: '1px dashed rgba(66, 133, 244, 0.6)',\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n boxSizing: 'border-box' as const,\n display: 'flex',\n flexDirection: 'column' as const,\n overflow: 'hidden',\n }}\n />\n ),\n interactionDefaults: { isDraggable: false, isResizable: true, isRotatable: false },\n useAppearanceStream: false,\n renderLocked: (props) => <ListboxFillMode {...props} />,\n }),\n];\n","import { useRegisterRenderers } from '@embedpdf/plugin-annotation/@framework';\nimport { formRenderers } from './form-renderers';\n\n/**\n * Utility component that registers form field renderers once at app level.\n * Added via addUtility() so it mounts once, not per-page.\n */\nexport function FormRendererRegistration() {\n useRegisterRenderers(formRenderers);\n return null;\n}\n","import { createPluginPackage } from '@embedpdf/core';\nimport { FormPluginPackage as BaseFormPackage } from '@embedpdf/plugin-form';\nimport { FormRendererRegistration } from './components/form-renderer-registration';\n\nexport * from './hooks';\nexport * from './components';\nexport * from '@embedpdf/plugin-form';\n\nexport const FormPluginPackage = createPluginPackage(BaseFormPackage)\n .addUtility(FormRendererRegistration)\n .build();\n"],"names":["optionProps","isMultiple","selectedValues","optionValue","selected","includes","FormTextField","annotation","isSelected","scale","onClick","style","isHovered","setIsHovered","useState","object","field","isTextField","type","PDF_FORM_FIELD_TYPE","TEXTFIELD","value","isComb","flag","PDF_FORM_FIELD_FLAG","TEXT_COMB","maxLen","isMultiline","TEXT_MULTIPLINE","borderWidth","strokeWidth","fontStyle","fontSize","standardFontCssProperties","fontFamily","color","fontColor","lineHeight","jsx","onPointerDown","onMouseEnter","onMouseLeave","position","inset","background","border","strokeColor","outline","outlineOffset","boxSizing","pointerEvents","cursor","display","alignItems","overflow","padding","children","CombPreview","width","rect","size","whiteSpace","wordBreak","overflowWrap","textOverflow","cellWidth","chars","split","height","Array","from","length","map","_","i","top","left","justifyContent","borderRight","FormCheckbox","isChecked","isWidgetChecked","viewBox","d","fill","FormRadioButton","borderRadius","FormCombobox","selectedLabel","_a","COMBOBOX","options","find","o","label","jsxs","flex","minWidth","borderLeft","FormListbox","LISTBOX","flexDirection","opt","useFormCapability","useCapability","FormPlugin","id","useFormDocumentState","documentId","provides","state","setState","forDocument","getState","initialDocumentState","useEffect","scope","onStateChange","newState","useFormWidgetState","props","currentObject","pageIndex","formProvides","renderKey","setRenderKey","isReadOnly","READONLY","useMemo","onFieldValueChange","event","annotationId","k","handleChangeField","useCallback","newField","setFormFieldValues","RenderWidget","scaleFactor","imageUrl","setImageUrl","urlRef","useRef","task","renderWidget","dpr","window","devicePixelRatio","wait","blob","url","URL","createObjectURL","current","revokeObjectURL","ignore","abort","code","PdfErrorCode","Cancelled","message","Fragment","src","baseInputStyle","margin","inputStyle","selectStyle","textareaStyle","resize","combContainerStyle","combHiddenInputStyle","opacity","zIndex","combCellStyle","combCaretStyle","backgroundColor","CombField","inputRef","required","disabled","password","name","caretIndex","containerStyle","cellFontStyle","onFocus","onChange","onBlur","caretVisible","setCaretVisible","setInterval","v","clearInterval","showCaret","ref","maxLength","TextField","isEditable","onChangeField","syncExternalValue","localValue","setLocalValue","changeValue","evt","newValue","target","bw","fontCss","adjustedFontPx","wrapperStyle","useIOSZoomPrevention","visualStyle","borderStyle","borderColor","isDisabled","isRequired","REQUIRED","isPassword","TEXT_PASSWORD","isMultipleLine","combContainer","cellFont","combContent","inputContent","TextFillMode","formState","editing","setEditing","isFocused","selectedFieldId","document","activeElement","focus","handleFocus","selectField","handleBlur","getSelectedFieldId","deselectField","handleInputRef","el","visibility","ToggleFillMode","wrapperRef","toggle","exportValue","handleClick","handleKeyDown","e","key","preventDefault","tabIndex","onKeyDown","RadioButtonFillMode","selectRadio","ComboboxField","alternateName","handleChange","select","updatedOptions","selectedIndex","selectedTexts","filter","option","index","ComboboxFillMode","selectElRef","contains","requestAnimationFrame","selectInputRef","ListboxField","isMultipleChoice","CHOICE_MULTL_SELECT","handleOptionClick","clickedIndex","ListboxFillMode","formRenderers","createRenderer","matches","a","PdfAnnotationSubtype","WIDGET","render","renderPreview","bounds","interactionDefaults","isDraggable","isResizable","isRotatable","useAppearanceStream","renderLocked","CHECKBOX","RADIOBUTTON","FormRendererRegistration","useRegisterRenderers","FormPluginPackage","createPluginPackage","BaseFormPackage","addUtility","build","usePlugin"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export * from '../shared-preact';