vobi_document 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/blocks.cjs +33 -25
  2. package/dist/blocks.d.cts +14 -1
  3. package/dist/blocks.d.ts +14 -1
  4. package/dist/blocks.js +3 -3
  5. package/dist/{chunk-U56KVTK5.cjs → chunk-26DSIOEY.cjs} +8 -8
  6. package/dist/{chunk-U56KVTK5.cjs.map → chunk-26DSIOEY.cjs.map} +1 -1
  7. package/dist/{chunk-X2BLERM5.cjs → chunk-3FTKM37U.cjs} +24 -16
  8. package/dist/chunk-3FTKM37U.cjs.map +1 -0
  9. package/dist/{chunk-2EBYURIX.js → chunk-CZB7F2LA.js} +3 -3
  10. package/dist/{chunk-2EBYURIX.js.map → chunk-CZB7F2LA.js.map} +1 -1
  11. package/dist/{chunk-AQ5FAAP6.cjs → chunk-GR76U6FP.cjs} +37 -11
  12. package/dist/chunk-GR76U6FP.cjs.map +1 -0
  13. package/dist/{chunk-KUB3TYG2.cjs → chunk-I22MGPXO.cjs} +22 -7
  14. package/dist/chunk-I22MGPXO.cjs.map +1 -0
  15. package/dist/{chunk-HMTCQOEV.js → chunk-JYSA6IM5.js} +22 -14
  16. package/dist/chunk-JYSA6IM5.js.map +1 -0
  17. package/dist/{chunk-6GRYRVU5.js → chunk-M6FQVH76.js} +4 -4
  18. package/dist/{chunk-6GRYRVU5.js.map → chunk-M6FQVH76.js.map} +1 -1
  19. package/dist/{chunk-JEVWEGSE.js → chunk-MUSSJOOA.js} +21 -7
  20. package/dist/chunk-MUSSJOOA.js.map +1 -0
  21. package/dist/{chunk-ABIEQHS2.js → chunk-N3IDPT3B.js} +31 -8
  22. package/dist/chunk-N3IDPT3B.js.map +1 -0
  23. package/dist/{chunk-IUDN2CGP.js → chunk-OJZJJEJX.js} +73 -32
  24. package/dist/chunk-OJZJJEJX.js.map +1 -0
  25. package/dist/{chunk-ZXWOZZXO.cjs → chunk-QJ5W5EED.cjs} +4 -4
  26. package/dist/{chunk-ZXWOZZXO.cjs.map → chunk-QJ5W5EED.cjs.map} +1 -1
  27. package/dist/{chunk-NDHTMYPA.cjs → chunk-RO3Y2MSU.cjs} +7 -7
  28. package/dist/{chunk-NDHTMYPA.cjs.map → chunk-RO3Y2MSU.cjs.map} +1 -1
  29. package/dist/{chunk-MHTTFNK2.cjs → chunk-RZOR3HOA.cjs} +80 -37
  30. package/dist/chunk-RZOR3HOA.cjs.map +1 -0
  31. package/dist/{chunk-M2TPAU2F.js → chunk-SOIYSSU3.js} +32 -3
  32. package/dist/chunk-SOIYSSU3.js.map +1 -0
  33. package/dist/{chunk-IRFFN74K.cjs → chunk-SP5LCPDG.cjs} +32 -2
  34. package/dist/chunk-SP5LCPDG.cjs.map +1 -0
  35. package/dist/{chunk-KCZKC3OG.js → chunk-W52ULJCW.js} +3 -3
  36. package/dist/{chunk-KCZKC3OG.js.map → chunk-W52ULJCW.js.map} +1 -1
  37. package/dist/editor.cjs +15 -15
  38. package/dist/editor.js +3 -3
  39. package/dist/index.cjs +114 -90
  40. package/dist/index.d.cts +2 -2
  41. package/dist/index.d.ts +2 -2
  42. package/dist/index.js +11 -11
  43. package/dist/print.cjs +13 -13
  44. package/dist/print.js +4 -4
  45. package/dist/render.cjs +19 -19
  46. package/dist/render.js +4 -4
  47. package/dist/variables.cjs +41 -25
  48. package/dist/variables.d.cts +34 -2
  49. package/dist/variables.d.ts +34 -2
  50. package/dist/variables.js +4 -4
  51. package/package.json +1 -1
  52. package/dist/chunk-ABIEQHS2.js.map +0 -1
  53. package/dist/chunk-AQ5FAAP6.cjs.map +0 -1
  54. package/dist/chunk-HMTCQOEV.js.map +0 -1
  55. package/dist/chunk-IRFFN74K.cjs.map +0 -1
  56. package/dist/chunk-IUDN2CGP.js.map +0 -1
  57. package/dist/chunk-JEVWEGSE.js.map +0 -1
  58. package/dist/chunk-KUB3TYG2.cjs.map +0 -1
  59. package/dist/chunk-M2TPAU2F.js.map +0 -1
  60. package/dist/chunk-MHTTFNK2.cjs.map +0 -1
  61. package/dist/chunk-X2BLERM5.cjs.map +0 -1
package/dist/render.cjs CHANGED
@@ -1,72 +1,72 @@
1
1
  'use strict';
2
2
 
3
- var chunkU56KVTK5_cjs = require('./chunk-U56KVTK5.cjs');
4
- var chunkNDHTMYPA_cjs = require('./chunk-NDHTMYPA.cjs');
3
+ var chunk26DSIOEY_cjs = require('./chunk-26DSIOEY.cjs');
4
+ var chunkRO3Y2MSU_cjs = require('./chunk-RO3Y2MSU.cjs');
5
5
  require('./chunk-ERKU5FDV.cjs');
6
- require('./chunk-ZXWOZZXO.cjs');
7
- require('./chunk-IRFFN74K.cjs');
6
+ require('./chunk-QJ5W5EED.cjs');
7
+ require('./chunk-SP5LCPDG.cjs');
8
8
 
9
9
 
10
10
 
11
11
  Object.defineProperty(exports, "CoverEditable", {
12
12
  enumerable: true,
13
- get: function () { return chunkU56KVTK5_cjs.CoverEditable; }
13
+ get: function () { return chunk26DSIOEY_cjs.CoverEditable; }
14
14
  });
15
15
  Object.defineProperty(exports, "CoverTemplateStatic", {
16
16
  enumerable: true,
17
- get: function () { return chunkU56KVTK5_cjs.CoverTemplateStatic; }
17
+ get: function () { return chunk26DSIOEY_cjs.CoverTemplateStatic; }
18
18
  });
19
19
  Object.defineProperty(exports, "COMPANY_INFO_ICONS", {
20
20
  enumerable: true,
21
- get: function () { return chunkNDHTMYPA_cjs.COMPANY_INFO_ICONS; }
21
+ get: function () { return chunkRO3Y2MSU_cjs.COMPANY_INFO_ICONS; }
22
22
  });
23
23
  Object.defineProperty(exports, "COVER_TEMPLATE_IDS", {
24
24
  enumerable: true,
25
- get: function () { return chunkNDHTMYPA_cjs.COVER_TEMPLATE_IDS; }
25
+ get: function () { return chunkRO3Y2MSU_cjs.COVER_TEMPLATE_IDS; }
26
26
  });
27
27
  Object.defineProperty(exports, "CoverPage", {
28
28
  enumerable: true,
29
- get: function () { return chunkNDHTMYPA_cjs.CoverPage; }
29
+ get: function () { return chunkRO3Y2MSU_cjs.CoverPage; }
30
30
  });
31
31
  Object.defineProperty(exports, "DG_ERROR", {
32
32
  enumerable: true,
33
- get: function () { return chunkNDHTMYPA_cjs.DG_ERROR; }
33
+ get: function () { return chunkRO3Y2MSU_cjs.DG_ERROR; }
34
34
  });
35
35
  Object.defineProperty(exports, "DG_MESSAGE_SOURCE", {
36
36
  enumerable: true,
37
- get: function () { return chunkNDHTMYPA_cjs.DG_MESSAGE_SOURCE; }
37
+ get: function () { return chunkRO3Y2MSU_cjs.DG_MESSAGE_SOURCE; }
38
38
  });
39
39
  Object.defineProperty(exports, "DG_READY", {
40
40
  enumerable: true,
41
- get: function () { return chunkNDHTMYPA_cjs.DG_READY; }
41
+ get: function () { return chunkRO3Y2MSU_cjs.DG_READY; }
42
42
  });
43
43
  Object.defineProperty(exports, "DocumentRenderer", {
44
44
  enumerable: true,
45
- get: function () { return chunkNDHTMYPA_cjs.DocumentRenderer; }
45
+ get: function () { return chunkRO3Y2MSU_cjs.DocumentRenderer; }
46
46
  });
47
47
  Object.defineProperty(exports, "FOOTER_INFO_ORDER", {
48
48
  enumerable: true,
49
- get: function () { return chunkNDHTMYPA_cjs.FOOTER_INFO_ORDER; }
49
+ get: function () { return chunkRO3Y2MSU_cjs.FOOTER_INFO_ORDER; }
50
50
  });
51
51
  Object.defineProperty(exports, "FooterBar", {
52
52
  enumerable: true,
53
- get: function () { return chunkNDHTMYPA_cjs.FooterBar; }
53
+ get: function () { return chunkRO3Y2MSU_cjs.FooterBar; }
54
54
  });
55
55
  Object.defineProperty(exports, "HEADER_INFO_ORDER", {
56
56
  enumerable: true,
57
- get: function () { return chunkNDHTMYPA_cjs.HEADER_INFO_ORDER; }
57
+ get: function () { return chunkRO3Y2MSU_cjs.HEADER_INFO_ORDER; }
58
58
  });
59
59
  Object.defineProperty(exports, "HeaderBar", {
60
60
  enumerable: true,
61
- get: function () { return chunkNDHTMYPA_cjs.HeaderBar; }
61
+ get: function () { return chunkRO3Y2MSU_cjs.HeaderBar; }
62
62
  });
63
63
  Object.defineProperty(exports, "resolveCoverAccent", {
64
64
  enumerable: true,
65
- get: function () { return chunkNDHTMYPA_cjs.resolveCoverAccent; }
65
+ get: function () { return chunkRO3Y2MSU_cjs.resolveCoverAccent; }
66
66
  });
67
67
  Object.defineProperty(exports, "resolveCoverColors", {
68
68
  enumerable: true,
69
- get: function () { return chunkNDHTMYPA_cjs.resolveCoverColors; }
69
+ get: function () { return chunkRO3Y2MSU_cjs.resolveCoverColors; }
70
70
  });
71
71
  //# sourceMappingURL=render.cjs.map
72
72
  //# sourceMappingURL=render.cjs.map
package/dist/render.js CHANGED
@@ -1,7 +1,7 @@
1
- export { CoverEditable, CoverTemplateStatic } from './chunk-KCZKC3OG.js';
2
- export { COMPANY_INFO_ICONS, COVER_TEMPLATE_IDS, CoverPage, DG_ERROR, DG_MESSAGE_SOURCE, DG_READY, DocumentRenderer, FOOTER_INFO_ORDER, FooterBar, HEADER_INFO_ORDER, HeaderBar, resolveCoverAccent, resolveCoverColors } from './chunk-6GRYRVU5.js';
1
+ export { CoverEditable, CoverTemplateStatic } from './chunk-W52ULJCW.js';
2
+ export { COMPANY_INFO_ICONS, COVER_TEMPLATE_IDS, CoverPage, DG_ERROR, DG_MESSAGE_SOURCE, DG_READY, DocumentRenderer, FOOTER_INFO_ORDER, FooterBar, HEADER_INFO_ORDER, HeaderBar, resolveCoverAccent, resolveCoverColors } from './chunk-M6FQVH76.js';
3
3
  import './chunk-PLQNNXS2.js';
4
- import './chunk-2EBYURIX.js';
5
- import './chunk-M2TPAU2F.js';
4
+ import './chunk-CZB7F2LA.js';
5
+ import './chunk-SOIYSSU3.js';
6
6
  //# sourceMappingURL=render.js.map
7
7
  //# sourceMappingURL=render.js.map
@@ -1,95 +1,111 @@
1
1
  'use strict';
2
2
 
3
- var chunkAQ5FAAP6_cjs = require('./chunk-AQ5FAAP6.cjs');
4
- var chunkKUB3TYG2_cjs = require('./chunk-KUB3TYG2.cjs');
5
- var chunkZXWOZZXO_cjs = require('./chunk-ZXWOZZXO.cjs');
6
- var chunkIRFFN74K_cjs = require('./chunk-IRFFN74K.cjs');
3
+ var chunkGR76U6FP_cjs = require('./chunk-GR76U6FP.cjs');
4
+ var chunkI22MGPXO_cjs = require('./chunk-I22MGPXO.cjs');
5
+ var chunkQJ5W5EED_cjs = require('./chunk-QJ5W5EED.cjs');
6
+ var chunkSP5LCPDG_cjs = require('./chunk-SP5LCPDG.cjs');
7
7
 
8
8
 
9
9
 
10
+ Object.defineProperty(exports, "VARIABLE_MENU_MAX_HEIGHT", {
11
+ enumerable: true,
12
+ get: function () { return chunkGR76U6FP_cjs.VARIABLE_MENU_MAX_HEIGHT; }
13
+ });
14
+ Object.defineProperty(exports, "VARIABLE_MENU_WIDTH", {
15
+ enumerable: true,
16
+ get: function () { return chunkGR76U6FP_cjs.VARIABLE_MENU_WIDTH; }
17
+ });
10
18
  Object.defineProperty(exports, "VariableMenu", {
11
19
  enumerable: true,
12
- get: function () { return chunkAQ5FAAP6_cjs.VariableMenu; }
20
+ get: function () { return chunkGR76U6FP_cjs.VariableMenu; }
21
+ });
22
+ Object.defineProperty(exports, "placeVariableMenu", {
23
+ enumerable: true,
24
+ get: function () { return chunkGR76U6FP_cjs.placeVariableMenu; }
13
25
  });
14
26
  Object.defineProperty(exports, "variableCatalogSchema", {
15
27
  enumerable: true,
16
- get: function () { return chunkAQ5FAAP6_cjs.variableCatalogSchema; }
28
+ get: function () { return chunkGR76U6FP_cjs.variableCatalogSchema; }
17
29
  });
18
30
  Object.defineProperty(exports, "variableDefSchema", {
19
31
  enumerable: true,
20
- get: function () { return chunkAQ5FAAP6_cjs.variableDefSchema; }
32
+ get: function () { return chunkGR76U6FP_cjs.variableDefSchema; }
21
33
  });
22
34
  Object.defineProperty(exports, "variableTypeSchema", {
23
35
  enumerable: true,
24
- get: function () { return chunkAQ5FAAP6_cjs.variableTypeSchema; }
36
+ get: function () { return chunkGR76U6FP_cjs.variableTypeSchema; }
25
37
  });
26
38
  Object.defineProperty(exports, "CHIP_CLASS", {
27
39
  enumerable: true,
28
- get: function () { return chunkKUB3TYG2_cjs.CHIP_CLASS; }
40
+ get: function () { return chunkI22MGPXO_cjs.CHIP_CLASS; }
41
+ });
42
+ Object.defineProperty(exports, "EMPTY_CHIP_CLASS", {
43
+ enumerable: true,
44
+ get: function () { return chunkI22MGPXO_cjs.EMPTY_CHIP_CLASS; }
29
45
  });
30
46
  Object.defineProperty(exports, "INVALID_CHIP_CLASS", {
31
47
  enumerable: true,
32
- get: function () { return chunkKUB3TYG2_cjs.INVALID_CHIP_CLASS; }
48
+ get: function () { return chunkI22MGPXO_cjs.INVALID_CHIP_CLASS; }
33
49
  });
34
50
  Object.defineProperty(exports, "NOT_INFORMED_LABEL", {
35
51
  enumerable: true,
36
- get: function () { return chunkKUB3TYG2_cjs.NOT_INFORMED_LABEL; }
52
+ get: function () { return chunkI22MGPXO_cjs.NOT_INFORMED_LABEL; }
37
53
  });
38
54
  Object.defineProperty(exports, "buildVariableChipHtml", {
39
55
  enumerable: true,
40
- get: function () { return chunkKUB3TYG2_cjs.buildVariableChipHtml; }
56
+ get: function () { return chunkI22MGPXO_cjs.buildVariableChipHtml; }
41
57
  });
42
58
  Object.defineProperty(exports, "collectVariableIssues", {
43
59
  enumerable: true,
44
- get: function () { return chunkKUB3TYG2_cjs.collectVariableIssues; }
60
+ get: function () { return chunkI22MGPXO_cjs.collectVariableIssues; }
45
61
  });
46
62
  Object.defineProperty(exports, "resolveVariableHtml", {
47
63
  enumerable: true,
48
- get: function () { return chunkKUB3TYG2_cjs.resolveVariableHtml; }
64
+ get: function () { return chunkI22MGPXO_cjs.resolveVariableHtml; }
49
65
  });
50
66
  Object.defineProperty(exports, "formatResolvedValues", {
51
67
  enumerable: true,
52
- get: function () { return chunkZXWOZZXO_cjs.formatResolvedValues; }
68
+ get: function () { return chunkQJ5W5EED_cjs.formatResolvedValues; }
53
69
  });
54
70
  Object.defineProperty(exports, "formatValue", {
55
71
  enumerable: true,
56
- get: function () { return chunkZXWOZZXO_cjs.formatValue; }
72
+ get: function () { return chunkQJ5W5EED_cjs.formatValue; }
57
73
  });
58
74
  Object.defineProperty(exports, "resolveDocumentVariables", {
59
75
  enumerable: true,
60
- get: function () { return chunkZXWOZZXO_cjs.resolveDocumentVariables; }
76
+ get: function () { return chunkQJ5W5EED_cjs.resolveDocumentVariables; }
61
77
  });
62
78
  Object.defineProperty(exports, "CatalogProvider", {
63
79
  enumerable: true,
64
- get: function () { return chunkIRFFN74K_cjs.CatalogProvider; }
80
+ get: function () { return chunkSP5LCPDG_cjs.CatalogProvider; }
65
81
  });
66
82
  Object.defineProperty(exports, "ResolvedProvider", {
67
83
  enumerable: true,
68
- get: function () { return chunkIRFFN74K_cjs.ResolvedProvider; }
84
+ get: function () { return chunkSP5LCPDG_cjs.ResolvedProvider; }
69
85
  });
70
86
  Object.defineProperty(exports, "extractBindingKeys", {
71
87
  enumerable: true,
72
- get: function () { return chunkIRFFN74K_cjs.extractBindingKeys; }
88
+ get: function () { return chunkSP5LCPDG_cjs.extractBindingKeys; }
73
89
  });
74
90
  Object.defineProperty(exports, "findInvalidBindings", {
75
91
  enumerable: true,
76
- get: function () { return chunkIRFFN74K_cjs.findInvalidBindings; }
92
+ get: function () { return chunkSP5LCPDG_cjs.findInvalidBindings; }
77
93
  });
78
94
  Object.defineProperty(exports, "useCatalog", {
79
95
  enumerable: true,
80
- get: function () { return chunkIRFFN74K_cjs.useCatalog; }
96
+ get: function () { return chunkSP5LCPDG_cjs.useCatalog; }
81
97
  });
82
98
  Object.defineProperty(exports, "useResolvedVariables", {
83
99
  enumerable: true,
84
- get: function () { return chunkIRFFN74K_cjs.useResolvedVariables; }
100
+ get: function () { return chunkSP5LCPDG_cjs.useResolvedVariables; }
85
101
  });
86
102
  Object.defineProperty(exports, "useTranslator", {
87
103
  enumerable: true,
88
- get: function () { return chunkIRFFN74K_cjs.useTranslator; }
104
+ get: function () { return chunkSP5LCPDG_cjs.useTranslator; }
89
105
  });
90
106
  Object.defineProperty(exports, "useUnresolvedDisplay", {
91
107
  enumerable: true,
92
- get: function () { return chunkIRFFN74K_cjs.useUnresolvedDisplay; }
108
+ get: function () { return chunkSP5LCPDG_cjs.useUnresolvedDisplay; }
93
109
  });
94
110
  //# sourceMappingURL=variables.cjs.map
95
111
  //# sourceMappingURL=variables.cjs.map
@@ -29,12 +29,44 @@ type Props = {
29
29
  accept?: VariableType[];
30
30
  model?: string;
31
31
  onPick: (def: VariableDef) => void;
32
+ /** Altura máxima do painel em px. O host reduz quando não há espaço na viewport. */
33
+ maxHeight?: number;
32
34
  };
33
- declare function VariableMenu({ accept, model, onPick }: Props): react.JSX.Element;
35
+ declare const VARIABLE_MENU_WIDTH = 260;
36
+ declare const VARIABLE_MENU_MAX_HEIGHT = 320;
37
+ declare function VariableMenu({ accept, model, onPick, maxHeight }: Props): react.JSX.Element;
38
+
39
+ /** Retângulo da âncora em coordenadas de viewport (o que `getBoundingClientRect` devolve). */
40
+ type MenuAnchor = {
41
+ top: number;
42
+ bottom: number;
43
+ left: number;
44
+ };
45
+ type MenuViewport = {
46
+ width: number;
47
+ height: number;
48
+ };
49
+ type MenuPlacement = {
50
+ top: number;
51
+ left: number;
52
+ maxHeight: number;
53
+ placement: 'top' | 'bottom';
54
+ };
55
+ /**
56
+ * Posiciona o menu de variáveis (`position: fixed`) ancorado no cursor: abre para baixo quando cabe,
57
+ * inverte para cima quando não cabe, e encolhe `maxHeight` ao espaço disponível.
58
+ * Sem isso o menu aberto no fim da página fica cortado pela viewport — ver docs/variables.md.
59
+ */
60
+ declare const placeVariableMenu: (anchor: MenuAnchor, viewport: MenuViewport, options?: {
61
+ width?: number;
62
+ maxHeight?: number;
63
+ minHeight?: number;
64
+ }) => MenuPlacement;
34
65
 
35
66
  declare const NOT_INFORMED_LABEL = "N\u00E3o informado";
36
67
  declare const CHIP_CLASS = "dg-var";
37
68
  declare const INVALID_CHIP_CLASS = "dg-var--invalid";
69
+ declare const EMPTY_CHIP_CLASS = "dg-var--empty";
38
70
  /** Markup canônico do chip de variável — editores de host inserem por aqui. */
39
71
  declare const buildVariableChipHtml: (def: {
40
72
  key: string;
@@ -71,4 +103,4 @@ declare function ResolvedProvider({ resolved, ensureResolved, unresolvedDisplay,
71
103
  declare function useResolvedVariables(): ResolvedVariables;
72
104
  declare function useUnresolvedDisplay(): UnresolvedDisplay;
73
105
 
74
- export { CHIP_CLASS, INVALID_CHIP_CLASS, NOT_INFORMED_LABEL, ResolvedProvider, ResolvedVariables, UnresolvedDisplay, VariableCatalog, VariableContext, VariableDef, VariableMenu, VariableResolver, VariableType, buildVariableChipHtml, collectVariableIssues, extractBindingKeys, findInvalidBindings, formatResolvedValues, formatValue, resolveDocumentVariables, resolveVariableHtml, useResolvedVariables, useUnresolvedDisplay, variableCatalogSchema, variableDefSchema, variableTypeSchema };
106
+ export { CHIP_CLASS, EMPTY_CHIP_CLASS, INVALID_CHIP_CLASS, type MenuAnchor, type MenuPlacement, type MenuViewport, NOT_INFORMED_LABEL, ResolvedProvider, ResolvedVariables, UnresolvedDisplay, VARIABLE_MENU_MAX_HEIGHT, VARIABLE_MENU_WIDTH, VariableCatalog, VariableContext, VariableDef, VariableMenu, VariableResolver, VariableType, buildVariableChipHtml, collectVariableIssues, extractBindingKeys, findInvalidBindings, formatResolvedValues, formatValue, placeVariableMenu, resolveDocumentVariables, resolveVariableHtml, useResolvedVariables, useUnresolvedDisplay, variableCatalogSchema, variableDefSchema, variableTypeSchema };
@@ -29,12 +29,44 @@ type Props = {
29
29
  accept?: VariableType[];
30
30
  model?: string;
31
31
  onPick: (def: VariableDef) => void;
32
+ /** Altura máxima do painel em px. O host reduz quando não há espaço na viewport. */
33
+ maxHeight?: number;
32
34
  };
33
- declare function VariableMenu({ accept, model, onPick }: Props): react.JSX.Element;
35
+ declare const VARIABLE_MENU_WIDTH = 260;
36
+ declare const VARIABLE_MENU_MAX_HEIGHT = 320;
37
+ declare function VariableMenu({ accept, model, onPick, maxHeight }: Props): react.JSX.Element;
38
+
39
+ /** Retângulo da âncora em coordenadas de viewport (o que `getBoundingClientRect` devolve). */
40
+ type MenuAnchor = {
41
+ top: number;
42
+ bottom: number;
43
+ left: number;
44
+ };
45
+ type MenuViewport = {
46
+ width: number;
47
+ height: number;
48
+ };
49
+ type MenuPlacement = {
50
+ top: number;
51
+ left: number;
52
+ maxHeight: number;
53
+ placement: 'top' | 'bottom';
54
+ };
55
+ /**
56
+ * Posiciona o menu de variáveis (`position: fixed`) ancorado no cursor: abre para baixo quando cabe,
57
+ * inverte para cima quando não cabe, e encolhe `maxHeight` ao espaço disponível.
58
+ * Sem isso o menu aberto no fim da página fica cortado pela viewport — ver docs/variables.md.
59
+ */
60
+ declare const placeVariableMenu: (anchor: MenuAnchor, viewport: MenuViewport, options?: {
61
+ width?: number;
62
+ maxHeight?: number;
63
+ minHeight?: number;
64
+ }) => MenuPlacement;
34
65
 
35
66
  declare const NOT_INFORMED_LABEL = "N\u00E3o informado";
36
67
  declare const CHIP_CLASS = "dg-var";
37
68
  declare const INVALID_CHIP_CLASS = "dg-var--invalid";
69
+ declare const EMPTY_CHIP_CLASS = "dg-var--empty";
38
70
  /** Markup canônico do chip de variável — editores de host inserem por aqui. */
39
71
  declare const buildVariableChipHtml: (def: {
40
72
  key: string;
@@ -71,4 +103,4 @@ declare function ResolvedProvider({ resolved, ensureResolved, unresolvedDisplay,
71
103
  declare function useResolvedVariables(): ResolvedVariables;
72
104
  declare function useUnresolvedDisplay(): UnresolvedDisplay;
73
105
 
74
- export { CHIP_CLASS, INVALID_CHIP_CLASS, NOT_INFORMED_LABEL, ResolvedProvider, ResolvedVariables, UnresolvedDisplay, VariableCatalog, VariableContext, VariableDef, VariableMenu, VariableResolver, VariableType, buildVariableChipHtml, collectVariableIssues, extractBindingKeys, findInvalidBindings, formatResolvedValues, formatValue, resolveDocumentVariables, resolveVariableHtml, useResolvedVariables, useUnresolvedDisplay, variableCatalogSchema, variableDefSchema, variableTypeSchema };
106
+ export { CHIP_CLASS, EMPTY_CHIP_CLASS, INVALID_CHIP_CLASS, type MenuAnchor, type MenuPlacement, type MenuViewport, NOT_INFORMED_LABEL, ResolvedProvider, ResolvedVariables, UnresolvedDisplay, VARIABLE_MENU_MAX_HEIGHT, VARIABLE_MENU_WIDTH, VariableCatalog, VariableContext, VariableDef, VariableMenu, VariableResolver, VariableType, buildVariableChipHtml, collectVariableIssues, extractBindingKeys, findInvalidBindings, formatResolvedValues, formatValue, placeVariableMenu, resolveDocumentVariables, resolveVariableHtml, useResolvedVariables, useUnresolvedDisplay, variableCatalogSchema, variableDefSchema, variableTypeSchema };
package/dist/variables.js CHANGED
@@ -1,6 +1,6 @@
1
- export { VariableMenu, variableCatalogSchema, variableDefSchema, variableTypeSchema } from './chunk-ABIEQHS2.js';
2
- export { CHIP_CLASS, INVALID_CHIP_CLASS, NOT_INFORMED_LABEL, buildVariableChipHtml, collectVariableIssues, resolveVariableHtml } from './chunk-JEVWEGSE.js';
3
- export { formatResolvedValues, formatValue, resolveDocumentVariables } from './chunk-2EBYURIX.js';
4
- export { CatalogProvider, ResolvedProvider, extractBindingKeys, findInvalidBindings, useCatalog, useResolvedVariables, useTranslator, useUnresolvedDisplay } from './chunk-M2TPAU2F.js';
1
+ export { VARIABLE_MENU_MAX_HEIGHT, VARIABLE_MENU_WIDTH, VariableMenu, placeVariableMenu, variableCatalogSchema, variableDefSchema, variableTypeSchema } from './chunk-N3IDPT3B.js';
2
+ export { CHIP_CLASS, EMPTY_CHIP_CLASS, INVALID_CHIP_CLASS, NOT_INFORMED_LABEL, buildVariableChipHtml, collectVariableIssues, resolveVariableHtml } from './chunk-MUSSJOOA.js';
3
+ export { formatResolvedValues, formatValue, resolveDocumentVariables } from './chunk-CZB7F2LA.js';
4
+ export { CatalogProvider, ResolvedProvider, extractBindingKeys, findInvalidBindings, useCatalog, useResolvedVariables, useTranslator, useUnresolvedDisplay } from './chunk-SOIYSSU3.js';
5
5
  //# sourceMappingURL=variables.js.map
6
6
  //# sourceMappingURL=variables.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vobi_document",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/"
6
6
  },
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/variables/schema.ts","../src/variables/VariableMenu.tsx"],"names":[],"mappings":"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","file":"chunk-ABIEQHS2.js","sourcesContent":["import { z } from 'zod';\nimport type { VariableCatalog, VariableDef, VariableType } from './types';\n\ntype Schema<T> = z.ZodType<T, z.ZodTypeDef, unknown>;\n\nexport const variableTypeSchema: Schema<VariableType> = z.enum([\n 'string',\n 'number',\n 'date',\n 'currency',\n 'boolean',\n 'document',\n 'phone',\n 'zipcode'\n]);\n\nexport const variableDefSchema: Schema<VariableDef> = z\n .object({\n key: z.string().min(1),\n label: z.string().min(1),\n fullLabel: z.string().optional(),\n type: variableTypeSchema,\n model: z.string().min(1),\n default: z.unknown().optional()\n })\n .strict();\n\nexport const variableCatalogSchema: Schema<VariableCatalog> = z\n .object({\n catalog: z.array(variableDefSchema).default([])\n })\n .strict();\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { useCatalog, useTranslator } from './catalogContext';\nimport { useEnsureResolved, useResolvedVariables } from './resolvedContext';\nimport type { VariableDef, VariableType } from './types';\n\ntype Props = {\n accept?: VariableType[];\n model?: string;\n onPick: (def: VariableDef) => void;\n};\n\nconst Panel = styled.div`\n width: 260px;\n max-height: 320px;\n overflow: auto;\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n box-shadow: 0 12px 32px rgba(17, 24, 39, 0.16);\n padding: 6px;\n`;\n\nconst Search = styled.input`\n width: 100%;\n padding: 9px 10px;\n margin-bottom: 4px;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 13px;\n color: #111827;\n\n &::placeholder {\n color: #9aa3af;\n }\n &:focus {\n outline: none;\n border-color: #1a56db;\n }\n`;\n\nconst GroupLabel = styled.div`\n padding: 10px 10px 4px;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: #9aa3af;\n`;\n\nconst Option = styled.button`\n display: flex;\n flex-direction: column;\n gap: 1px;\n width: 100%;\n padding: 7px 10px;\n border: none;\n border-radius: 8px;\n background: transparent;\n cursor: pointer;\n text-align: left;\n\n &:hover {\n background: #f3f6fb;\n }\n`;\n\nconst OptionLabel = styled.span`\n color: #1f2937;\n font-size: 13px;\n font-weight: 500;\n`;\n\nconst OptionValue = styled.span`\n color: #9aa3af;\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst Missing = styled.span`\n color: #e02424;\n font-size: 12px;\n font-style: italic;\n`;\n\nconst Empty = styled.div`\n padding: 14px 10px;\n color: #9aa3af;\n text-align: center;\n font-size: 13px;\n`;\n\nfunction groupBy(defs: VariableDef[]): [string, VariableDef[]][] {\n const map = new Map<string, VariableDef[]>();\n defs.forEach(def => {\n const list = map.get(def.model ?? 'outros') ?? [];\n list.push(def);\n map.set(def.model ?? 'outros', list);\n });\n return [...map.entries()];\n}\n\nexport function VariableMenu({ accept, model, onPick }: Props) {\n const catalog = useCatalog();\n const translator = useTranslator();\n const preview = useResolvedVariables();\n const ensureResolved = useEnsureResolved();\n const [query, setQuery] = useState('');\n const [loading, setLoading] = useState(true);\n const searchRef = useRef<HTMLInputElement>(null);\n const catalogRef = useRef(catalog);\n catalogRef.current = catalog;\n\n useEffect(() => {\n searchRef.current?.focus();\n }, []);\n\n useEffect(() => {\n let active = true;\n ensureResolved(catalogRef.current.map(def => def.key)).finally(() => {\n if (active) setLoading(false);\n });\n return () => {\n active = false;\n };\n }, []);\n\n const options = useMemo(() => {\n const q = query.trim().toLowerCase();\n const matchesQuery = (def: VariableDef) =>\n def.label.toLowerCase().includes(q) || Boolean(def.fullLabel?.toLowerCase().includes(q));\n return catalog.filter(\n def => (!accept || accept.includes(def.type)) && (!model || def.model === model) && (!q || matchesQuery(def))\n );\n }, [catalog, accept, model, query]);\n\n return (\n <Panel>\n <Search ref={searchRef} placeholder=\"Inserir variável\" value={query} onChange={e => setQuery(e.target.value)} />\n {options.length === 0 && <Empty>Nenhuma variável</Empty>}\n {groupBy(options).map(([groupName, defs]) => (\n <div key={groupName}>\n <GroupLabel>{translator[groupName] ?? groupName}</GroupLabel>\n {defs.map(def => {\n const value = preview[def.key];\n return (\n <Option key={def.key} type=\"button\" onMouseDown={e => e.preventDefault()} onClick={() => onPick(def)}>\n <OptionLabel>{def.label}</OptionLabel>\n {value ? <OptionValue>{value}</OptionValue> : null}\n {!value && !loading ? <Missing>Dado não informado</Missing> : null}\n </Option>\n );\n })}\n </div>\n ))}\n </Panel>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/variables/schema.ts","../src/variables/VariableMenu.tsx"],"names":["z","styled","useCatalog","useTranslator","useResolvedVariables","useEnsureResolved","useState","useRef","useEffect","useMemo","jsx","jsxs"],"mappings":"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","file":"chunk-AQ5FAAP6.cjs","sourcesContent":["import { z } from 'zod';\nimport type { VariableCatalog, VariableDef, VariableType } from './types';\n\ntype Schema<T> = z.ZodType<T, z.ZodTypeDef, unknown>;\n\nexport const variableTypeSchema: Schema<VariableType> = z.enum([\n 'string',\n 'number',\n 'date',\n 'currency',\n 'boolean',\n 'document',\n 'phone',\n 'zipcode'\n]);\n\nexport const variableDefSchema: Schema<VariableDef> = z\n .object({\n key: z.string().min(1),\n label: z.string().min(1),\n fullLabel: z.string().optional(),\n type: variableTypeSchema,\n model: z.string().min(1),\n default: z.unknown().optional()\n })\n .strict();\n\nexport const variableCatalogSchema: Schema<VariableCatalog> = z\n .object({\n catalog: z.array(variableDefSchema).default([])\n })\n .strict();\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { useCatalog, useTranslator } from './catalogContext';\nimport { useEnsureResolved, useResolvedVariables } from './resolvedContext';\nimport type { VariableDef, VariableType } from './types';\n\ntype Props = {\n accept?: VariableType[];\n model?: string;\n onPick: (def: VariableDef) => void;\n};\n\nconst Panel = styled.div`\n width: 260px;\n max-height: 320px;\n overflow: auto;\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n box-shadow: 0 12px 32px rgba(17, 24, 39, 0.16);\n padding: 6px;\n`;\n\nconst Search = styled.input`\n width: 100%;\n padding: 9px 10px;\n margin-bottom: 4px;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n font-size: 13px;\n color: #111827;\n\n &::placeholder {\n color: #9aa3af;\n }\n &:focus {\n outline: none;\n border-color: #1a56db;\n }\n`;\n\nconst GroupLabel = styled.div`\n padding: 10px 10px 4px;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: #9aa3af;\n`;\n\nconst Option = styled.button`\n display: flex;\n flex-direction: column;\n gap: 1px;\n width: 100%;\n padding: 7px 10px;\n border: none;\n border-radius: 8px;\n background: transparent;\n cursor: pointer;\n text-align: left;\n\n &:hover {\n background: #f3f6fb;\n }\n`;\n\nconst OptionLabel = styled.span`\n color: #1f2937;\n font-size: 13px;\n font-weight: 500;\n`;\n\nconst OptionValue = styled.span`\n color: #9aa3af;\n font-size: 12px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst Missing = styled.span`\n color: #e02424;\n font-size: 12px;\n font-style: italic;\n`;\n\nconst Empty = styled.div`\n padding: 14px 10px;\n color: #9aa3af;\n text-align: center;\n font-size: 13px;\n`;\n\nfunction groupBy(defs: VariableDef[]): [string, VariableDef[]][] {\n const map = new Map<string, VariableDef[]>();\n defs.forEach(def => {\n const list = map.get(def.model ?? 'outros') ?? [];\n list.push(def);\n map.set(def.model ?? 'outros', list);\n });\n return [...map.entries()];\n}\n\nexport function VariableMenu({ accept, model, onPick }: Props) {\n const catalog = useCatalog();\n const translator = useTranslator();\n const preview = useResolvedVariables();\n const ensureResolved = useEnsureResolved();\n const [query, setQuery] = useState('');\n const [loading, setLoading] = useState(true);\n const searchRef = useRef<HTMLInputElement>(null);\n const catalogRef = useRef(catalog);\n catalogRef.current = catalog;\n\n useEffect(() => {\n searchRef.current?.focus();\n }, []);\n\n useEffect(() => {\n let active = true;\n ensureResolved(catalogRef.current.map(def => def.key)).finally(() => {\n if (active) setLoading(false);\n });\n return () => {\n active = false;\n };\n }, []);\n\n const options = useMemo(() => {\n const q = query.trim().toLowerCase();\n const matchesQuery = (def: VariableDef) =>\n def.label.toLowerCase().includes(q) || Boolean(def.fullLabel?.toLowerCase().includes(q));\n return catalog.filter(\n def => (!accept || accept.includes(def.type)) && (!model || def.model === model) && (!q || matchesQuery(def))\n );\n }, [catalog, accept, model, query]);\n\n return (\n <Panel>\n <Search ref={searchRef} placeholder=\"Inserir variável\" value={query} onChange={e => setQuery(e.target.value)} />\n {options.length === 0 && <Empty>Nenhuma variável</Empty>}\n {groupBy(options).map(([groupName, defs]) => (\n <div key={groupName}>\n <GroupLabel>{translator[groupName] ?? groupName}</GroupLabel>\n {defs.map(def => {\n const value = preview[def.key];\n return (\n <Option key={def.key} type=\"button\" onMouseDown={e => e.preventDefault()} onClick={() => onPick(def)}>\n <OptionLabel>{def.label}</OptionLabel>\n {value ? <OptionValue>{value}</OptionValue> : null}\n {!value && !loading ? <Missing>Dado não informado</Missing> : null}\n </Option>\n );\n })}\n </div>\n ))}\n </Panel>\n );\n}\n"]}