aurochs 0.12.2 → 0.12.4

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 (88) hide show
  1. package/dist/@aurochs-builder/pptx/src/builders/index.d.ts +2 -2
  2. package/dist/@aurochs-builder/pptx/src/builders/theme-exporter.d.ts +173 -3
  3. package/dist/@aurochs-builder/xlsx/src/worksheet.d.ts +8 -1
  4. package/dist/@aurochs-office/pptx/src/domain/content-types.d.ts +16 -0
  5. package/dist/@aurochs-office/pptx/src/domain/relationships.d.ts +14 -0
  6. package/dist/@aurochs-office/xlsx/src/domain/cell/address.d.ts +16 -0
  7. package/dist/@aurochs-office/xlsx/src/domain/style/number-format.d.ts +42 -0
  8. package/dist/@aurochs-office/xlsx/src/domain/style/types.d.ts +26 -1
  9. package/dist/@aurochs-ui/pptx-slide-canvas/src/shape/query.d.ts +1 -1
  10. package/dist/_shared/{FieldRow-tn4u5tyR.js → FieldRow-ChX-oQj4.js} +5 -2
  11. package/dist/_shared/FieldRow-ChX-oQj4.js.map +1 -0
  12. package/dist/_shared/{FillEditor-tMpg9XZc.js → FillEditor-FTmptP_m.js} +3 -3
  13. package/dist/_shared/{FillEditor-tMpg9XZc.js.map → FillEditor-FTmptP_m.js.map} +1 -1
  14. package/dist/_shared/{SearchableSelect-GEzfQibv.js → SearchableSelect-P0vcGKgZ.js} +2 -2
  15. package/dist/_shared/{SearchableSelect-GEzfQibv.js.map → SearchableSelect-P0vcGKgZ.js.map} +1 -1
  16. package/dist/_shared/{Select-CbNVWrAT.js → Select-CZTIxJJq.js} +3 -1
  17. package/dist/_shared/Select-CZTIxJJq.js.map +1 -0
  18. package/dist/_shared/{SlideList-DUpxzeb5.js → SlideList-DiGxzSsQ.js} +3 -3
  19. package/dist/_shared/{SlideList-DUpxzeb5.js.map → SlideList-DiGxzSsQ.js.map} +1 -1
  20. package/dist/_shared/{content-types-Dvnc0zg_.js → content-types-TUihEHB1.js} +19 -3
  21. package/dist/_shared/content-types-TUihEHB1.js.map +1 -0
  22. package/dist/_shared/{document-D8AbKS4A.js → document-D5catAHb.js} +4 -4
  23. package/dist/_shared/{document-D8AbKS4A.js.map → document-D5catAHb.js.map} +1 -1
  24. package/dist/_shared/{exporter-CqWL_dSh.js → exporter-DtjUFzSQ.js} +19 -24
  25. package/dist/_shared/exporter-DtjUFzSQ.js.map +1 -0
  26. package/dist/_shared/{external-content-loader-CRJzxg3w.js → external-content-loader-CGB0abTo.js} +10 -17
  27. package/dist/_shared/{external-content-loader-CRJzxg3w.js.map → external-content-loader-CGB0abTo.js.map} +1 -1
  28. package/dist/_shared/{format-value-CDSHMD3h.js → format-value-BxuqlEdl.js} +4 -1
  29. package/dist/_shared/format-value-BxuqlEdl.js.map +1 -0
  30. package/dist/_shared/{ooxml-content-types-Dc8d1YEr.js → ooxml-content-types-Dmt_q5u3.js} +41 -2
  31. package/dist/_shared/ooxml-content-types-Dmt_q5u3.js.map +1 -0
  32. package/dist/_shared/{ooxml-namespaces-o0hSZzll.js → ooxml-namespaces-CV81fX0r.js} +6 -1
  33. package/dist/_shared/{ooxml-namespaces-o0hSZzll.js.map → ooxml-namespaces-CV81fX0r.js.map} +1 -1
  34. package/dist/_shared/{ooxml-relationship-types-sJPF249X.js → ooxml-relationship-types-CiQnFzt8.js} +33 -3
  35. package/dist/_shared/ooxml-relationship-types-CiQnFzt8.js.map +1 -0
  36. package/dist/_shared/{pptx-loader-Dt2zo0OU.js → pptx-loader-CEDfUtm9.js} +4 -4
  37. package/dist/_shared/{pptx-loader-Dt2zo0OU.js.map → pptx-loader-CEDfUtm9.js.map} +1 -1
  38. package/dist/_shared/{relationships-FMVMa5qS.js → relationships-HmScW4GE.js} +16 -2
  39. package/dist/_shared/relationships-HmScW4GE.js.map +1 -0
  40. package/dist/_shared/{render-page-svg-C4kc6Pls.js → render-page-svg-DkLiTQ_K.js} +3 -3
  41. package/dist/_shared/{render-page-svg-C4kc6Pls.js.map → render-page-svg-DkLiTQ_K.js.map} +1 -1
  42. package/dist/_shared/shift-C1A-3U_N.js.map +1 -1
  43. package/dist/_shared/{slide-parser-BT02pIR2.js → slide-parser-BXTJvQl1.js} +5 -9
  44. package/dist/_shared/{slide-parser-BT02pIR2.js.map → slide-parser-BXTJvQl1.js.map} +1 -1
  45. package/dist/_shared/{theme-parser-CbNAQ21c.js → theme-parser-nW3b9z4b.js} +2 -2
  46. package/dist/_shared/{theme-parser-CbNAQ21c.js.map → theme-parser-nW3b9z4b.js.map} +1 -1
  47. package/dist/_shared/{useViewerKeyboard-y6svmhA6.js → useViewerKeyboard-izrEPd1r.js} +2 -2
  48. package/dist/_shared/{useViewerKeyboard-y6svmhA6.js.map → useViewerKeyboard-izrEPd1r.js.map} +1 -1
  49. package/dist/_shared/{worksheet-DQDWQqQQ.js → worksheet-BGZlJiYj.js} +9 -9
  50. package/dist/_shared/worksheet-BGZlJiYj.js.map +1 -0
  51. package/dist/cli.js +31757 -22607
  52. package/dist/docx/builder/index.js +7 -7
  53. package/dist/docx/builder/index.js.map +1 -1
  54. package/dist/docx/parser/index.js +2 -2
  55. package/dist/docx/viewer/index.js +1 -1
  56. package/dist/drawing-ml/editors/index.js +14 -11
  57. package/dist/drawing-ml/editors/index.js.map +1 -1
  58. package/dist/pdf/builder/index.js.map +1 -1
  59. package/dist/pdf/renderer/react/index.js +1 -1
  60. package/dist/pdf/renderer/svg/index.js +2 -2
  61. package/dist/pptx/builder/index.js +3266 -3268
  62. package/dist/pptx/builder/index.js.map +1 -1
  63. package/dist/pptx/domain/index.js +2 -2
  64. package/dist/pptx/extract/index.js +1 -1
  65. package/dist/pptx/parser/index.js +4 -4
  66. package/dist/pptx/renderer/svg/index.js +2 -2
  67. package/dist/pptx/slide-canvas/index.js +83 -96
  68. package/dist/pptx/slide-canvas/index.js.map +1 -1
  69. package/dist/pptx/slide-editors/index.js +3 -3
  70. package/dist/pptx/viewer/index.js +1 -1
  71. package/dist/pptx/viewer/slide-list/index.js +1 -1
  72. package/dist/xlsx/builder/index.js +5 -5
  73. package/dist/xlsx/parser/full/index.js +3 -3
  74. package/dist/xlsx/parser/full/index.js.map +1 -1
  75. package/dist/xlsx/renderer/svg/index.js +1 -1
  76. package/dist/xlsx/viewer/index.js +2 -2
  77. package/package.json +1 -1
  78. package/dist/@aurochs/pdf/src/parser/clip/clip-mask-apply.native.d.ts +0 -5
  79. package/dist/@aurochs/pdf/src/parser/soft-mask/soft-mask-text-raster.native.d.ts +0 -5
  80. package/dist/_shared/FieldRow-tn4u5tyR.js.map +0 -1
  81. package/dist/_shared/Select-CbNVWrAT.js.map +0 -1
  82. package/dist/_shared/content-types-Dvnc0zg_.js.map +0 -1
  83. package/dist/_shared/exporter-CqWL_dSh.js.map +0 -1
  84. package/dist/_shared/format-value-CDSHMD3h.js.map +0 -1
  85. package/dist/_shared/ooxml-content-types-Dc8d1YEr.js.map +0 -1
  86. package/dist/_shared/ooxml-relationship-types-sJPF249X.js.map +0 -1
  87. package/dist/_shared/relationships-FMVMa5qS.js.map +0 -1
  88. package/dist/_shared/worksheet-DQDWQqQQ.js.map +0 -1
@@ -18,8 +18,8 @@ export { applyComments } from './comment-builder';
18
18
  export { applyNotes } from './notes-builder';
19
19
  export { applySlideTransition } from './transition-builder';
20
20
  export { applyThemeEditsToPackage, applyThemeEditsToThemeXml } from './theme-builder';
21
- export { exportThemeAsPotx, getThemeFileName, buildThemeXml } from './theme-exporter';
22
- export type { ThemeExportOptions, LayoutExportEntry, BuildThemeXmlOptions } from './theme-exporter';
21
+ export { exportThemeAsPotx, getThemeFileName, buildThemeXml, buildThemeFromExportOptions, defaultThemeExportOptions, buildRootRels, buildContentTypes, buildAppProperties, buildPresentation, buildPresentationRels, buildSlideMaster, buildMasterRels, buildLayoutDocument, buildLayoutRels, buildBlankSlide, buildSlideRels, buildColorSchemeChildren, buildColorSchemeElement, buildFontElement, buildFontSchemeElement, buildFormatSchemeFromDomain, defaultFormatScheme, buildExtraColorSchemeList, buildExtraColorScheme, buildCustomColorsList, buildObjectDefaultsChildren, serializeObjectDefaultElement, serializeTextStyleLevelsElement, } from './theme-exporter';
22
+ export type { ThemeExportOptions, LayoutExportEntry, BuildThemeXmlOptions, BuildSlideRelsOptions } from './theme-exporter';
23
23
  export { applyChartUpdates } from './chart-builder';
24
24
  export { addChartsToSlide } from './chart-add-builder';
25
25
  export { applySmartArtUpdates } from './smartart-builder';
@@ -1,11 +1,12 @@
1
1
  import { SchemeColorName } from '@aurochs-office/drawing-ml/domain/color';
2
2
  import { FontScheme } from '@aurochs-office/ooxml/domain/font-scheme';
3
- import { Theme, CustomColor, ExtraColorScheme, FormatScheme, ObjectDefaults } from '@aurochs-office/pptx/domain/theme/types';
4
- import { MasterTextStyles } from '@aurochs-office/pptx/domain/text-style';
3
+ import { Theme, CustomColor, ExtraColorScheme, FormatScheme, ObjectDefaults, ObjectDefaultProperties } from '@aurochs-office/pptx/domain/theme/types';
4
+ import { MasterTextStyles, TextStyleLevels } from '@aurochs-office/pptx/domain/text-style';
5
5
  import { ColorMapping, ColorMapOverride } from '@aurochs-office/pptx/domain/color/types';
6
6
  import { Background, SlideLayoutType } from '@aurochs-office/pptx/domain';
7
7
  import { SlideTransition } from '@aurochs-office/pptx/domain/transition';
8
- import { XmlDocument } from '@aurochs/xml';
8
+ import { buildContentTypes as buildContentTypesOfficeLayer, buildAppProperties as buildAppPropertiesOfficeLayer, buildRootRels as buildRootRelsOfficeLayer, buildPresentation as buildPresentationOfficeLayer, buildLayoutRels as buildLayoutRelsOfficeLayer, buildMasterRels as buildMasterRelsOfficeLayer, buildBlankSlide as buildBlankSlideOfficeLayer, BuildContentTypesOptions as OfficeBuildContentTypesOptions, BuildPresentationOptions as OfficeBuildPresentationOptions, BuildPresentationRelsOptions as OfficeBuildPresentationRelsOptions, BuildSlideRelsOptions as OfficeBuildSlideRelsOptions } from '@aurochs-office/pptx/builders';
9
+ import { XmlDocument, XmlElement } from '@aurochs/xml';
9
10
  export type ThemeExportOptions = {
10
11
  /** Theme name (used in XML and file name) */
11
12
  readonly name: string;
@@ -52,6 +53,56 @@ export type LayoutExportEntry = {
52
53
  readonly colorMapOverride?: ColorMapOverride;
53
54
  readonly transition?: SlideTransition;
54
55
  };
56
+ export declare const buildRootRels: typeof buildRootRelsOfficeLayer;
57
+ export declare const buildAppProperties: typeof buildAppPropertiesOfficeLayer;
58
+ export declare const buildContentTypes: typeof buildContentTypesOfficeLayer;
59
+ export type BuildContentTypesOptions = OfficeBuildContentTypesOptions;
60
+ export declare const buildLayoutRels: typeof buildLayoutRelsOfficeLayer;
61
+ export declare const buildMasterRels: typeof buildMasterRelsOfficeLayer;
62
+ /**
63
+ * Build the presentation part's relationships.
64
+ *
65
+ * Backwards-compatible signature: accepts a slide count (number) or a
66
+ * full options object. The number form is preserved because most
67
+ * downstream callers just need to vary the slide count.
68
+ *
69
+ * @see ECMA-376 Part 2, §9.3 (Relationships)
70
+ */
71
+ export declare function buildPresentationRels(arg?: number | OfficeBuildPresentationRelsOptions): XmlDocument;
72
+ /**
73
+ * Options for buildSlideRels — either reference a layout by canonical
74
+ * 1-based index or supply an explicit target path. Re-exported from
75
+ * the office-layer SoT.
76
+ */
77
+ export type BuildSlideRelsOptions = OfficeBuildSlideRelsOptions;
78
+ /**
79
+ * Build a slide's relationships pointing at the slide layout it is
80
+ * bound to. Delegates to the office-layer SoT.
81
+ */
82
+ export declare function buildSlideRels(arg?: number | OfficeBuildSlideRelsOptions): XmlDocument;
83
+ /**
84
+ * Build the presentation part (ECMA-376 §19.2.1.26 CT_Presentation).
85
+ *
86
+ * Delegates to the office-layer SoT.
87
+ */
88
+ export declare const buildPresentation: typeof buildPresentationOfficeLayer;
89
+ export type BuildPresentationOptions = OfficeBuildPresentationOptions;
90
+ /**
91
+ * Build the slide master part (ECMA-376 §19.3.1.42).
92
+ *
93
+ * The schema requires p:clrMap and p:sldLayoutIdLst — both are emitted
94
+ * here using the canonical identity color mapping (or the override
95
+ * supplied via options.colorMapping) and the rId range allocated by
96
+ * buildMasterRels.
97
+ */
98
+ export declare function buildSlideMaster(options: ThemeExportOptions, layoutCount: number): XmlDocument;
99
+ /** Build a slide layout document from export data (ECMA-376 §19.3.1.39). */
100
+ export declare function buildLayoutDocument(entry: LayoutExportEntry): XmlDocument;
101
+ /**
102
+ * Build an empty p:sld document with a blank spTree and a master
103
+ * color-map override. Delegates to the office-layer SoT.
104
+ */
105
+ export declare const buildBlankSlide: typeof buildBlankSlideOfficeLayer;
55
106
  /**
56
107
  * Options for building a theme XML document from domain types.
57
108
  */
@@ -74,6 +125,125 @@ export type BuildThemeXmlOptions = {
74
125
  * @see ECMA-376 Part 1, Section 20.1.6.9 (CT_OfficeStyleSheet)
75
126
  */
76
127
  export declare function buildThemeXml(options: BuildThemeXmlOptions): XmlDocument;
128
+ /**
129
+ * Serialize a single `ObjectDefaultProperties` block to its container
130
+ * element (`<a:spDef>`, `<a:lnDef>`, or `<a:txDef>`).
131
+ *
132
+ * @see ECMA-376 Part 1, §20.1.6.10 (a:spDef / a:lnDef / a:txDef)
133
+ */
134
+ export declare function serializeObjectDefaultElement(name: "a:spDef" | "a:lnDef" | "a:txDef", props: ObjectDefaultProperties): XmlElement;
135
+ /**
136
+ * Build the children of `<a:objectDefaults>` from a domain
137
+ * `ObjectDefaults`.
138
+ *
139
+ * The returned array carries 0..3 elements (one each for `<a:spDef>`,
140
+ * `<a:lnDef>`, `<a:txDef>`) — callers wrap them in
141
+ * `<a:objectDefaults>` only when the array is non-empty.
142
+ *
143
+ * @see ECMA-376 Part 1, §20.1.6.7 (a:objectDefaults)
144
+ */
145
+ export declare function buildObjectDefaultsChildren(od: ObjectDefaults): XmlElement[];
146
+ /**
147
+ * Serialize TextStyleLevels to a named container element.
148
+ *
149
+ * Used for `p:titleStyle`/`p:bodyStyle`/`p:otherStyle` (master text
150
+ * styles, ECMA-376 §19.3.1.51) and `a:lstStyle` (object defaults
151
+ * §20.1.6.7 and theme overrides). The container element name is the
152
+ * caller's responsibility because the same level structure appears
153
+ * under many parent names.
154
+ *
155
+ * @see ECMA-376 §21.1.2.4 (TextListStyle) for the level layout.
156
+ */
157
+ export declare function serializeTextStyleLevelsElement(containerName: string, levels: TextStyleLevels): XmlElement;
158
+ /** Adapter: build theme XML from ThemeExportOptions (delegates to buildThemeXml). */
159
+ export declare function buildThemeFromExportOptions(options: ThemeExportOptions): XmlDocument;
160
+ /**
161
+ * Build a complete ThemeExportOptions populated with Office defaults.
162
+ *
163
+ * Use this when a builder needs a full theme but does not have one to
164
+ * supply (e.g. when synthesising a blank deck). Each call returns a
165
+ * fresh object so the caller may mutate/override fields freely.
166
+ */
167
+ export declare function defaultThemeExportOptions(name?: string): ThemeExportOptions;
168
+ /**
169
+ * Build the default format scheme.
170
+ *
171
+ * Emits 3 placeholder-color fills, 3 placeholder-color stroked lines
172
+ * (subtle/moderate/intense), 3 effect-style stubs, and 3 background
173
+ * fills — exactly the minimum needed to satisfy ECMA-376
174
+ * §20.1.4.1.14 and the PowerPoint reader.
175
+ *
176
+ * @see ECMA-376 Part 1, §20.1.4.1.14 (a:fmtScheme)
177
+ */
178
+ export declare function defaultFormatScheme(): FormatScheme;
179
+ /**
180
+ * Build the children of an `<a:clrScheme>` element from a 12-slot
181
+ * color scheme.
182
+ *
183
+ * @see ECMA-376 Part 1, §20.1.6.2 (CT_ColorScheme)
184
+ */
185
+ export declare function buildColorSchemeChildren(cs: Readonly<Record<SchemeColorName, string>>): XmlElement[];
186
+ /**
187
+ * Build a complete `<a:clrScheme name="...">` element from a 12-slot
188
+ * color scheme.
189
+ *
190
+ * @see ECMA-376 Part 1, §20.1.6.2 (CT_ColorScheme)
191
+ */
192
+ export declare function buildColorSchemeElement(name: string, cs: Readonly<Record<SchemeColorName, string>>): XmlElement;
193
+ /**
194
+ * Build a single `<a:majorFont>` or `<a:minorFont>` element under
195
+ * `<a:fontScheme>` from a domain `FontSpec`.
196
+ *
197
+ * @param prefix - either `"major"` or `"minor"` — the resulting tag is
198
+ * `a:${prefix}Font`.
199
+ *
200
+ * @see ECMA-376 Part 1, §20.1.4.1.16 (a:majorFont)
201
+ * @see ECMA-376 Part 1, §20.1.4.1.17 (a:minorFont)
202
+ */
203
+ export declare function buildFontElement(prefix: "major" | "minor", font: FontScheme["majorFont"]): XmlElement;
204
+ /**
205
+ * Build the `<a:fontScheme>` container with both `majorFont` and
206
+ * `minorFont` children populated from the domain `FontScheme`.
207
+ *
208
+ * @see ECMA-376 Part 1, §20.1.4.1.18 (a:fontScheme)
209
+ */
210
+ export declare function buildFontSchemeElement(name: string, fontScheme: FontScheme): XmlElement;
211
+ /**
212
+ * Build the `<a:fmtScheme>` element from a domain `FormatScheme`.
213
+ *
214
+ * The domain shape is fixed at three fill / line / effect / bgFill
215
+ * style entries — emit each as a positional child of the standard
216
+ * `fillStyleLst` / `lnStyleLst` / `effectStyleLst` / `bgFillStyleLst`
217
+ * containers per the schema sequence.
218
+ *
219
+ * @see ECMA-376 Part 1, §20.1.4.1.14 (a:fmtScheme)
220
+ */
221
+ export declare function buildFormatSchemeFromDomain(name: string, fmt: FormatScheme): XmlElement;
222
+ /**
223
+ * Build the `<a:extraClrSchemeLst>` container from an array of
224
+ * domain extra-color-scheme entries. Returns an empty list element
225
+ * when the input is empty (callers may choose to skip emission).
226
+ *
227
+ * @see ECMA-376 Part 1, §20.1.6.5 (a:extraClrSchemeLst)
228
+ */
229
+ export declare function buildExtraColorSchemeList(schemes: readonly ExtraColorScheme[]): XmlElement;
230
+ /**
231
+ * Build a single `<a:extraClrScheme>` entry containing a clrScheme
232
+ * + clrMap pair.
233
+ *
234
+ * @see ECMA-376 Part 1, §20.1.6.5 (a:extraClrSchemeLst)
235
+ */
236
+ export declare function buildExtraColorScheme(scheme: ExtraColorScheme): XmlElement;
237
+ /**
238
+ * Build the `<a:custClrLst>` container (returns 0 or 1 elements).
239
+ *
240
+ * Returns an empty array when no custom colors are provided so the
241
+ * caller can spread the result into a parent's children without an
242
+ * extra `if`.
243
+ *
244
+ * @see ECMA-376 Part 1, §20.1.6.3 (a:custClrLst)
245
+ */
246
+ export declare function buildCustomColorsList(customColors?: readonly CustomColor[]): XmlElement[];
77
247
  /**
78
248
  * Export theme as a POTX (PowerPoint Template) file.
79
249
  *
@@ -170,7 +170,7 @@ export declare function serializeColBreaks(breaks: readonly XlsxPageBreak[]): Xm
170
170
  /**
171
171
  * Serialize a complete worksheet to XML element.
172
172
  *
173
- * The child elements are ordered according to ECMA-376 §18.3.1.99:
173
+ * The child elements are ordered according to ECMA-376 §18.3.1.99 (CT_Worksheet):
174
174
  * 1. sheetPr (tabColor)
175
175
  * 2. dimension
176
176
  * 3. sheetViews
@@ -188,11 +188,18 @@ export declare function serializeColBreaks(breaks: readonly XlsxPageBreak[]): Xm
188
188
  * 15. pageSetup
189
189
  * 16. headerFooter
190
190
  * 17. rowBreaks / colBreaks
191
+ * 18. drawing
192
+ *
193
+ * NOTE: `<drawing>` must appear AFTER page setup elements per the CT_Worksheet
194
+ * schema sequence. Excel's strict OOXML validator rejects sheet1.xml when this
195
+ * order is violated (file opens as "unreadable content"), while LibreOffice and
196
+ * lenient parsers accept the misordered form.
191
197
  *
192
198
  * @param worksheet - Worksheet to serialize
193
199
  * @param sharedStrings - Shared string table for string values
194
200
  * @returns XmlElement for the worksheet element
195
201
  *
196
202
  * @see ECMA-376 Part 4, Section 18.3.1.99 (worksheet)
203
+ * @see ECMA-376 Part 4, Section 18.3.1.36 (drawing)
197
204
  */
198
205
  export declare function serializeWorksheet(worksheet: XlsxWorksheetInput, sharedStrings: SharedStringTable, drawingRelId?: string): XmlElement;
@@ -33,7 +33,23 @@ export declare const CONTENT_TYPES: {
33
33
  readonly SLIDE_MASTER: "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml";
34
34
  readonly THEME: "application/vnd.openxmlformats-officedocument.theme+xml";
35
35
  readonly NOTES: "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml";
36
+ /** Notes master (§19.3.1.27 CT_NotesMaster) */
37
+ readonly NOTES_MASTER: "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml";
38
+ /** Handout master (§19.3.1.24 CT_HandoutMaster) */
39
+ readonly HANDOUT_MASTER: "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml";
36
40
  readonly PRESENTATION: "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml";
41
+ /** Presentation properties part (§19.2.1.45 CT_PresentationPr) */
42
+ readonly PRES_PROPS: "application/vnd.openxmlformats-officedocument.presentationml.presProps+xml";
43
+ /** View properties part (§19.2.1.50 CT_ViewPr) */
44
+ readonly VIEW_PROPS: "application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml";
45
+ /** Table styles part (§14.2.9) */
46
+ readonly TABLE_STYLES: "application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml";
47
+ /** OPC core properties (§11.3) */
48
+ readonly CORE_PROPERTIES: "application/vnd.openxmlformats-package.core-properties+xml";
49
+ /** Office extended properties (docProps/app.xml) */
50
+ readonly EXTENDED_PROPERTIES: "application/vnd.openxmlformats-officedocument.extended-properties+xml";
51
+ /** Office custom properties */
52
+ readonly CUSTOM_PROPERTIES: "application/vnd.openxmlformats-officedocument.custom-properties+xml";
37
53
  };
38
54
  /**
39
55
  * Parse content types from [Content_Types].xml
@@ -24,6 +24,20 @@ export declare const RELATIONSHIP_TYPES: {
24
24
  readonly HYPERLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink";
25
25
  /** Notes slide relationship */
26
26
  readonly NOTES: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide";
27
+ /** Notes master relationship (§19.3.1.27) */
28
+ readonly NOTES_MASTER: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster";
29
+ /** Handout master relationship (§19.3.1.24) */
30
+ readonly HANDOUT_MASTER: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/handoutMaster";
31
+ /** Presentation properties relationship (§19.2.1.45 presProps.xml) */
32
+ readonly PRES_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps";
33
+ /** View properties relationship (§19.2.1.50 viewProps.xml) */
34
+ readonly VIEW_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps";
35
+ /** Table styles relationship (§14.2.9 tableStyles.xml) */
36
+ readonly TABLE_STYLES: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles";
37
+ /** OPC core properties relationship (§11.3 docProps/core.xml) */
38
+ readonly CORE_PROPERTIES: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";
39
+ /** OPC extended properties relationship (docProps/app.xml) */
40
+ readonly EXTENDED_PROPERTIES: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";
27
41
  /** Diagram drawing relationship (DrawingML diagrams) */
28
42
  readonly DIAGRAM_DRAWING: "http://schemas.microsoft.com/office/2007/relationships/diagramDrawing";
29
43
  /** VML drawing relationship */
@@ -27,6 +27,22 @@ export type CellRange = {
27
27
  /** Optional sheet name (for cross-sheet references) */
28
28
  readonly sheetName?: string;
29
29
  };
30
+ /**
31
+ * Create a relative CellAddress from 1-based column and row indices.
32
+ *
33
+ * This is the most common address form when building cells programmatically.
34
+ * Both `colAbsolute` and `rowAbsolute` are set to `false`.
35
+ *
36
+ * @param col - 1-based column index
37
+ * @param row - 1-based row index
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * cellAddress(1, 1) // A1 (relative)
42
+ * cellAddress(3, 5) // C5 (relative)
43
+ * ```
44
+ */
45
+ export declare function cellAddress(col: number, row: number): CellAddress;
30
46
  /**
31
47
  * Convert a column letter (e.g., "A", "Z", "AA") to a 1-based column index.
32
48
  *
@@ -21,6 +21,22 @@ export type XlsxNumberFormat = {
21
21
  * @see ECMA-376 Part 4, Section 18.8.30
22
22
  */
23
23
  export declare const BUILTIN_NUMBER_FORMATS: ReadonlyMap<number, string>;
24
+ /**
25
+ * Well-known built-in number format IDs for common use cases.
26
+ *
27
+ * These are the most commonly referenced built-in IDs when programmatically
28
+ * creating XLSX files. They correspond to entries in BUILTIN_NUMBER_FORMATS above.
29
+ *
30
+ * @see ECMA-376 Part 4, Section 18.8.30
31
+ */
32
+ export declare const WELL_KNOWN_NUM_FMT_IDS: {
33
+ /** General format (ID 0): "General" */
34
+ readonly general: 0;
35
+ /** Short date format (ID 14): "mm-dd-yy" */
36
+ readonly date: 14;
37
+ /** Date and time format (ID 22): "m/d/yy h:mm" */
38
+ readonly datetime: 22;
39
+ };
24
40
  /**
25
41
  * Check if a numFmtId is a built-in format
26
42
  *
@@ -45,6 +61,32 @@ export declare function getBuiltinFormatCode(numFmtIdValue: number): string | un
45
61
  * @returns true if the format code contains date/time tokens
46
62
  */
47
63
  export declare function isDateFormat(formatCode: string): boolean;
64
+ /**
65
+ * Built-in number format IDs that represent date/time formats.
66
+ *
67
+ * ECMA-376 Part 4, Section 18.8.30 defines built-in formats 0-49.
68
+ * Among those, IDs 14-22 are date/time formats, 27-36 are locale-dependent
69
+ * date/time formats (CJK calendars, etc.), and 45-47 are time/duration formats.
70
+ *
71
+ * This set is derived from BUILTIN_NUMBER_FORMATS above — every ID whose
72
+ * format code contains date/time tokens (y, m, d, h, s) is included.
73
+ *
74
+ * @see ECMA-376 Part 4, Section 18.8.30
75
+ */
76
+ export declare const BUILTIN_DATE_NUM_FMT_IDS: ReadonlySet<number>;
77
+ /**
78
+ * Check if a numFmtId represents a date/time format.
79
+ *
80
+ * Checks built-in date format IDs first, then falls back to resolving
81
+ * the format code from custom formats and checking its tokens.
82
+ *
83
+ * @param numFmtIdValue - The number format ID to check
84
+ * @param customFormats - Custom number formats from the workbook styles
85
+ * @returns true if the format ID represents a date/time format
86
+ *
87
+ * @see ECMA-376 Part 4, Section 18.8.30
88
+ */
89
+ export declare function isDateNumFmtId(numFmtIdValue: number, customFormats: readonly XlsxNumberFormat[]): boolean;
48
90
  /**
49
91
  * Resolve the format code for a given numFmtId.
50
92
  *
@@ -4,7 +4,7 @@ import { XlsxBorder } from './border';
4
4
  import { XlsxNumberFormat } from './number-format';
5
5
  import { XlsxDifferentialFormat } from './dxf';
6
6
  import { XlsxTableStyle } from './table-style';
7
- import { NumFmtId, FontId, FillId, BorderId } from '../types';
7
+ import { NumFmtId, FontId, FillId, BorderId, StyleId } from '../types';
8
8
  /**
9
9
  * Cell text alignment options
10
10
  *
@@ -165,3 +165,28 @@ export type XlsxStyleSheet = {
165
165
  * @see ECMA-376 Part 4, Section 18.8.39
166
166
  */
167
167
  export declare function createDefaultStyleSheet(): XlsxStyleSheet;
168
+ /**
169
+ * Result of creating a stylesheet with date/datetime formats appended.
170
+ */
171
+ export type DateStyleSheet = {
172
+ /** The stylesheet with date formats appended to cellXfs */
173
+ readonly styles: XlsxStyleSheet;
174
+ /** StyleId for date-formatted cells (numFmtId 14: "mm-dd-yy") */
175
+ readonly dateStyleId: StyleId;
176
+ /** StyleId for datetime-formatted cells (numFmtId 22: "m/d/yy h:mm") */
177
+ readonly datetimeStyleId: StyleId;
178
+ };
179
+ /**
180
+ * Create a default stylesheet extended with date and datetime cell formats.
181
+ *
182
+ * Appends two cellXf entries to the default stylesheet:
183
+ * - Index 1: date format (WELL_KNOWN_NUM_FMT_IDS.date = 14)
184
+ * - Index 2: datetime format (WELL_KNOWN_NUM_FMT_IDS.datetime = 22)
185
+ *
186
+ * Returns the stylesheet along with the StyleId values for each,
187
+ * eliminating the need to manually track cellXf indices.
188
+ *
189
+ * @see ECMA-376 Part 4, Section 18.8.10 (cellXfs)
190
+ * @see ECMA-376 Part 4, Section 18.8.30 (numFmt)
191
+ */
192
+ export declare function createDateStyleSheet(): DateStyleSheet;
@@ -7,7 +7,7 @@ export declare function findShapeById(shapes: readonly Shape[], id: ShapeId): Sh
7
7
  /**
8
8
  * Find shape by ID and return with parent groups chain.
9
9
  */
10
- export declare function findShapeByIdWithParents(shapes: readonly Shape[], id: ShapeId, parentGroups?: readonly GrpShape[]): {
10
+ export declare function findShapeByIdWithParents(shapes: readonly Shape[], id: ShapeId): {
11
11
  shape: Shape;
12
12
  parentGroups: readonly GrpShape[];
13
13
  } | undefined;
@@ -59,6 +59,7 @@ function Input({
59
59
  type = "text",
60
60
  suffix,
61
61
  placeholder,
62
+ ariaLabel,
62
63
  disabled,
63
64
  readOnly,
64
65
  onKeyDown,
@@ -107,6 +108,7 @@ function Input({
107
108
  onCompositionUpdate,
108
109
  onCompositionEnd,
109
110
  placeholder,
111
+ "aria-label": ariaLabel,
110
112
  disabled,
111
113
  readOnly,
112
114
  min,
@@ -529,7 +531,7 @@ const labelStyle = {
529
531
  color: `var(--text-secondary, ${colorTokens.text.secondary})`,
530
532
  userSelect: "none"
531
533
  };
532
- function Toggle({ checked, onChange, label, disabled, className, style }) {
534
+ function Toggle({ checked, onChange, label, ariaLabel, disabled, className, style }) {
533
535
  const handleClick = useCallback(() => {
534
536
  if (!disabled) {
535
537
  onChange(!checked);
@@ -543,6 +545,7 @@ function Toggle({ checked, onChange, label, disabled, className, style }) {
543
545
  onClick: handleClick,
544
546
  role: "switch",
545
547
  "aria-checked": checked,
548
+ "aria-label": ariaLabel ?? label,
546
549
  children: [
547
550
  /* @__PURE__ */ jsx("div", { style: trackStyle(checked, disabled ?? false), children: /* @__PURE__ */ jsx("div", { style: thumbStyle(checked) }) }),
548
551
  label && /* @__PURE__ */ jsx("span", { style: labelStyle, children: label })
@@ -633,4 +636,4 @@ export {
633
636
  Toggle as T,
634
637
  FieldRow as a
635
638
  };
636
- //# sourceMappingURL=FieldRow-tn4u5tyR.js.map
639
+ //# sourceMappingURL=FieldRow-ChX-oQj4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldRow-ChX-oQj4.js","sources":["../../../../packages/@aurochs-ui/ui-components/src/primitives/Input.tsx","../../../../packages/@aurochs-ui/ui-components/src/primitives/popover-position.ts","../../../../packages/@aurochs-ui/ui-components/src/primitives/Popover.tsx","../../../../packages/@aurochs-ui/ui-components/src/primitives/Toggle.tsx","../../../../packages/@aurochs-ui/ui-components/src/layout/FieldGroup.tsx","../../../../packages/@aurochs-ui/ui-components/src/layout/FieldRow.tsx"],"sourcesContent":["/**\n * @file Input primitive component\n *\n * A minimal input component that supports text and number types with optional suffix.\n * Suffix is rendered inside the input container for consistent layout.\n */\n\nimport { useCallback, useEffect, type ChangeEvent, type CSSProperties } from \"react\";\nimport { colorTokens, fontTokens, radiusTokens } from \"../design-tokens\";\n\nexport type InputProps = {\n readonly value: string | number;\n readonly onChange: (value: string | number) => void;\n /** DOM ChangeEvent callback — use when you need selectionStart/End from the event. */\n readonly onInputChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n readonly type?: \"text\" | \"number\";\n readonly suffix?: string;\n readonly placeholder?: string;\n readonly ariaLabel?: string;\n readonly disabled?: boolean;\n readonly readOnly?: boolean;\n readonly onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n readonly onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n readonly onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n /** Fires when the text selection (caret position) changes — arrow keys, mouse clicks, etc. */\n readonly onSelect?: (event: React.SyntheticEvent<HTMLInputElement>) => void;\n readonly onCompositionStart?: (event: React.CompositionEvent<HTMLInputElement>) => void;\n readonly onCompositionUpdate?: (event: React.CompositionEvent<HTMLInputElement>) => void;\n readonly onCompositionEnd?: (event: React.CompositionEvent<HTMLInputElement>) => void;\n readonly className?: string;\n readonly style?: CSSProperties;\n readonly min?: number;\n readonly max?: number;\n readonly step?: number;\n /** Width constraint for the input container */\n readonly width?: number | string;\n};\n\n// One-time style injection for spinner hiding\nconst stylesInjected = { current: false };\nfunction injectStyles() {\n if (stylesInjected.current || typeof document === \"undefined\") {\n return;\n }\n const style = document.createElement(\"style\");\n style.textContent = `\n .office-editor-input::-webkit-outer-spin-button,\n .office-editor-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n .office-editor-input {\n -moz-appearance: textfield;\n }\n `;\n document.head.appendChild(style);\n stylesInjected.current = true;\n}\n\nconst containerStyle = (width?: number | string): CSSProperties => ({\n display: \"flex\",\n alignItems: \"center\",\n backgroundColor: `var(--bg-tertiary, ${colorTokens.background.tertiary})`,\n borderRadius: radiusTokens.sm,\n overflow: \"hidden\",\n // Use explicit width if provided, otherwise fill container\n width: width ?? \"100%\",\n minWidth: \"48px\",\n maxWidth: width ?? \"100%\",\n});\n\nconst inputInnerStyle = (hasSuffix: boolean): CSSProperties => ({\n flex: 1,\n minWidth: 0,\n width: \"100%\",\n padding: hasSuffix ? \"5px 4px 5px 8px\" : \"5px 8px\",\n fontSize: fontTokens.size.md,\n fontFamily: \"inherit\",\n color: `var(--text-primary, ${colorTokens.text.primary})`,\n backgroundColor: \"transparent\",\n border: \"none\",\n outline: \"none\",\n});\n\nconst suffixInnerStyle: CSSProperties = {\n flexShrink: 0,\n paddingRight: \"8px\",\n fontSize: fontTokens.size.sm,\n color: `var(--text-tertiary, ${colorTokens.text.tertiary})`,\n userSelect: \"none\",\n pointerEvents: \"none\",\n};\n\n/**\n * Input field with optional suffix.\n */\nexport function Input({\n value,\n onChange,\n onInputChange,\n type = \"text\",\n suffix,\n placeholder,\n ariaLabel,\n disabled,\n readOnly,\n onKeyDown,\n onFocus,\n onBlur,\n onSelect,\n onCompositionStart,\n onCompositionUpdate,\n onCompositionEnd,\n className,\n style,\n min,\n max,\n step,\n width,\n}: InputProps) {\n // Inject spinner-hiding styles once\n useEffect(() => {\n injectStyles();\n }, []);\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n onInputChange?.(e);\n const newValue = type === \"number\" ? parseFloat(e.target.value) : e.target.value;\n onChange(type === \"number\" && isNaN(newValue as number) ? 0 : newValue);\n },\n [onChange, onInputChange, type]\n );\n\n const hasSuffix = !!suffix;\n\n return (\n <div\n style={{ ...containerStyle(width), ...style }}\n className={className}\n >\n <input\n type={type}\n value={value}\n onChange={handleChange}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n onSelect={onSelect}\n onCompositionStart={onCompositionStart}\n onCompositionUpdate={onCompositionUpdate}\n onCompositionEnd={onCompositionEnd}\n placeholder={placeholder}\n aria-label={ariaLabel}\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n step={step}\n style={inputInnerStyle(hasSuffix)}\n className=\"office-editor-input\"\n />\n {suffix && <span style={suffixInnerStyle}>{suffix}</span>}\n </div>\n );\n}\n","/**\n * @file Popover positioning helpers\n *\n * Centralized placement logic with flip and viewport clamping.\n */\n\nexport type PopoverSide = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type PopoverAlign = \"start\" | \"center\" | \"end\";\n\nexport type PopoverViewport = {\n readonly width: number;\n readonly height: number;\n};\n\nexport type PopoverSize = {\n readonly width: number;\n readonly height: number;\n};\n\nexport type PopoverPositionInput = {\n readonly triggerRect: DOMRect;\n readonly contentSize: PopoverSize;\n readonly viewport: PopoverViewport;\n readonly preferredSide: PopoverSide;\n readonly align: PopoverAlign;\n readonly gap: number;\n readonly padding: number;\n readonly arrowInset: number;\n};\n\nexport type PopoverPositionResult = {\n readonly top: number;\n readonly left: number;\n readonly side: PopoverSide;\n readonly arrowOffset: number;\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(value, max));\n}\n\nfunction getOppositeSide(side: PopoverSide): PopoverSide {\n switch (side) {\n case \"left\":\n return \"right\";\n case \"right\":\n return \"left\";\n case \"top\":\n return \"bottom\";\n default:\n return \"top\";\n }\n}\n\nfunction getAvailableSpaces(\n triggerRect: DOMRect,\n viewport: PopoverViewport,\n padding: number\n): Record<PopoverSide, number> {\n return {\n top: triggerRect.top - padding,\n bottom: viewport.height - triggerRect.bottom - padding,\n left: triggerRect.left - padding,\n right: viewport.width - triggerRect.right - padding,\n };\n}\n\ntype CanFitInput = {\n readonly side: PopoverSide;\n readonly contentSize: PopoverSize;\n readonly spaces: Record<PopoverSide, number>;\n readonly gap: number;\n};\n\nfunction canFit({ side, contentSize, spaces, gap }: CanFitInput): boolean {\n if (side === \"top\" || side === \"bottom\") {\n return spaces[side] >= contentSize.height + gap;\n }\n return spaces[side] >= contentSize.width + gap;\n}\n\nfunction resolveSide(input: PopoverPositionInput): PopoverSide {\n const { preferredSide, contentSize, gap, triggerRect, viewport, padding } = input;\n const spaces = getAvailableSpaces(triggerRect, viewport, padding);\n const oppositeSide = getOppositeSide(preferredSide);\n\n if (canFit({ side: preferredSide, contentSize, spaces, gap })) {\n return preferredSide;\n }\n if (canFit({ side: oppositeSide, contentSize, spaces, gap })) {\n return oppositeSide;\n }\n\n const orderedSides: readonly PopoverSide[] = [\n preferredSide,\n oppositeSide,\n \"right\",\n \"left\",\n \"bottom\",\n \"top\",\n ];\n\n const maxSpace = Math.max(...Object.values(spaces));\n const maxSides = orderedSides.filter((side) => spaces[side] === maxSpace);\n return maxSides[0] ?? preferredSide;\n}\n\nfunction getAlignedLeft(\n triggerRect: DOMRect,\n contentSize: PopoverSize,\n align: PopoverAlign\n): number {\n if (align === \"center\") {\n return triggerRect.left + (triggerRect.width - contentSize.width) / 2;\n }\n if (align === \"end\") {\n return triggerRect.right - contentSize.width;\n }\n return triggerRect.left;\n}\n\nfunction getAlignedTop(\n triggerRect: DOMRect,\n contentSize: PopoverSize,\n align: PopoverAlign\n): number {\n if (align === \"center\") {\n return triggerRect.top + (triggerRect.height - contentSize.height) / 2;\n }\n if (align === \"end\") {\n return triggerRect.bottom - contentSize.height;\n }\n return triggerRect.top;\n}\n\ntype AlignedPositionInput = {\n readonly triggerRect: DOMRect;\n readonly contentSize: PopoverSize;\n readonly side: PopoverSide;\n readonly align: PopoverAlign;\n readonly gap: number;\n};\n\nfunction getAlignedPosition({\n triggerRect, contentSize, side, align, gap,\n}: AlignedPositionInput): { top: number; left: number } {\n if (side === \"top\" || side === \"bottom\") {\n const left = getAlignedLeft(triggerRect, contentSize, align);\n if (side === \"bottom\") {\n return { top: triggerRect.bottom + gap, left };\n }\n return { top: triggerRect.top - contentSize.height - gap, left };\n }\n\n const top = getAlignedTop(triggerRect, contentSize, align);\n if (side === \"right\") {\n return { top, left: triggerRect.right + gap };\n }\n return { top, left: triggerRect.left - contentSize.width - gap };\n}\n\ntype ArrowOffsetInput = {\n readonly side: PopoverSide;\n readonly triggerRect: DOMRect;\n readonly contentPosition: { top: number; left: number };\n readonly contentSize: PopoverSize;\n readonly arrowInset: number;\n};\n\nfunction getArrowOffset({\n side, triggerRect, contentPosition, contentSize, arrowInset,\n}: ArrowOffsetInput): number {\n const triggerCenterX = triggerRect.left + triggerRect.width / 2;\n const triggerCenterY = triggerRect.top + triggerRect.height / 2;\n if (side === \"top\" || side === \"bottom\") {\n return clamp(\n triggerCenterX - contentPosition.left,\n arrowInset,\n contentSize.width - arrowInset\n );\n }\n return clamp(\n triggerCenterY - contentPosition.top,\n arrowInset,\n contentSize.height - arrowInset\n );\n}\n\n/**\n * Calculate popover placement with flip and clamping.\n */\nexport function calculatePopoverPosition(\n input: PopoverPositionInput\n): PopoverPositionResult {\n const { triggerRect, contentSize, viewport, align, gap, padding, arrowInset } = input;\n const side = resolveSide(input);\n const aligned = getAlignedPosition({ triggerRect, contentSize, side, align, gap });\n\n const left = clamp(\n aligned.left,\n padding,\n Math.max(padding, viewport.width - contentSize.width - padding)\n );\n const top = clamp(\n aligned.top,\n padding,\n Math.max(padding, viewport.height - contentSize.height - padding)\n );\n\n const arrowOffset = getArrowOffset({\n side,\n triggerRect,\n contentPosition: { top, left },\n contentSize,\n arrowInset,\n });\n\n return { top, left, side, arrowOffset };\n}\n","/**\n * @file Popover primitive component\n *\n * A minimal popover that appears relative to a trigger element.\n * Uses a portal to render outside the DOM hierarchy.\n */\n\nimport {\n useState,\n useRef,\n useLayoutEffect,\n useCallback,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { colorTokens, radiusTokens, spacingTokens } from \"../design-tokens\";\nimport {\n calculatePopoverPosition,\n type PopoverAlign,\n type PopoverSide,\n} from \"./popover-position\";\n\nexport type PopoverProps = {\n /** Trigger element that opens the popover */\n readonly trigger: ReactNode;\n /** Content to display in the popover */\n readonly children: ReactNode;\n /** Whether the popover is open (controlled mode) */\n readonly open?: boolean;\n /** Callback when open state changes */\n readonly onOpenChange?: (open: boolean) => void;\n /** Preferred alignment of the popover */\n readonly align?: PopoverAlign;\n /** Preferred side of the popover */\n readonly side?: PopoverSide;\n /** Show an arrow pointing to the trigger */\n readonly showArrow?: boolean;\n /** Disable the popover */\n readonly disabled?: boolean;\n /** Additional CSS class */\n readonly className?: string;\n /** Content padding. Default: spacingTokens.md (12px). Set to \"0\" to disable. */\n readonly padding?: string;\n /**\n * Unstyled mode: Popover only provides positioning, portal, and overlay.\n * No container chrome (background, border, shadow, border-radius) is applied.\n * Use when children provide their own container chrome.\n */\n readonly unstyled?: boolean;\n};\n\nconst overlayStyle: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n zIndex: 999,\n};\n\nconst contentBaseStyle: CSSProperties = {\n position: \"fixed\",\n zIndex: 1000,\n backgroundColor: `var(--bg-secondary, ${colorTokens.background.secondary})`,\n borderRadius: `var(--radius-md, ${radiusTokens.md})`,\n border: `1px solid var(--border-primary, ${colorTokens.border.primary})`,\n boxShadow: \"0 8px 32px rgba(0, 0, 0, 0.4)\",\n maxWidth: \"400px\",\n maxHeight: \"80vh\",\n overflow: \"auto\",\n};\n\n/** Unstyled mode: positioning only. No container chrome. */\nconst contentUnstyledStyle: CSSProperties = {\n position: \"fixed\",\n zIndex: 1000,\n};\n\nconst defaultPadding = spacingTokens.md;\n\nconst arrowBorderSize = 8;\nconst arrowFillSize = 7;\n\ntype ArrowStyles = {\n readonly border: CSSProperties;\n readonly fill: CSSProperties;\n};\n\ntype ArrowConfig = {\n readonly offsetProp: \"top\" | \"left\";\n readonly positionProp: \"left\" | \"right\" | \"top\" | \"bottom\";\n readonly edgeProp: \"borderLeft\" | \"borderRight\" | \"borderTop\" | \"borderBottom\";\n readonly crossProps: readonly [\"borderTop\" | \"borderBottom\" | \"borderLeft\" | \"borderRight\", \"borderTop\" | \"borderBottom\" | \"borderLeft\" | \"borderRight\"];\n readonly transform: \"translateX(-50%)\" | \"translateY(-50%)\";\n};\n\nconst arrowConfigs: Record<PopoverSide, ArrowConfig> = {\n right: {\n offsetProp: \"top\",\n positionProp: \"left\",\n edgeProp: \"borderRight\",\n crossProps: [\"borderTop\", \"borderBottom\"],\n transform: \"translateY(-50%)\",\n },\n left: {\n offsetProp: \"top\",\n positionProp: \"right\",\n edgeProp: \"borderLeft\",\n crossProps: [\"borderTop\", \"borderBottom\"],\n transform: \"translateY(-50%)\",\n },\n top: {\n offsetProp: \"left\",\n positionProp: \"bottom\",\n edgeProp: \"borderBottom\",\n crossProps: [\"borderLeft\", \"borderRight\"],\n transform: \"translateX(-50%)\",\n },\n bottom: {\n offsetProp: \"left\",\n positionProp: \"top\",\n edgeProp: \"borderTop\",\n crossProps: [\"borderLeft\", \"borderRight\"],\n transform: \"translateX(-50%)\",\n },\n};\n\ntype BuildArrowStyleInput = {\n readonly side: PopoverSide;\n readonly offset: number;\n readonly size: number;\n readonly color: string;\n};\n\nfunction buildArrowStyle({ side, offset, size, color }: BuildArrowStyleInput): CSSProperties {\n const config = arrowConfigs[side];\n const style: Record<string, string | number> = {\n position: \"absolute\",\n width: 0,\n height: 0,\n pointerEvents: \"none\",\n transform: config.transform,\n };\n style[config.offsetProp] = offset;\n style[config.positionProp] = -size;\n style[config.edgeProp] = `${size}px solid ${color}`;\n style[config.crossProps[0]] = `${size}px solid transparent`;\n style[config.crossProps[1]] = `${size}px solid transparent`;\n return style as CSSProperties;\n}\n\nfunction getArrowStyles(side: PopoverSide, offset: number): ArrowStyles {\n return {\n border: buildArrowStyle({\n side,\n offset,\n size: arrowBorderSize,\n color: `var(--border-primary, ${colorTokens.border.primary})`,\n }),\n fill: buildArrowStyle({\n side,\n offset,\n size: arrowFillSize,\n color: `var(--bg-secondary, ${colorTokens.background.secondary})`,\n }),\n };\n}\n\nfunction buildArrowStyles(\n showArrow: boolean,\n side: PopoverSide,\n offset: number\n): ArrowStyles | null {\n if (!showArrow) {\n return null;\n }\n return getArrowStyles(side, offset);\n}\n\ntype Position = {\n readonly top: number;\n readonly left: number;\n readonly side: PopoverSide;\n readonly arrowOffset: number;\n};\n\n/**\n * A popover component that displays content relative to a trigger element.\n */\nexport function Popover({\n trigger,\n children,\n open: controlledOpen,\n onOpenChange,\n align = \"center\",\n side = \"bottom\",\n showArrow = false,\n disabled,\n className,\n padding,\n unstyled = false,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<Position | null>(null);\n const positionUpdateIdRef = useRef(0);\n const resolvedPosition = position ?? {\n top: 0,\n left: 0,\n side,\n arrowOffset: 0,\n };\n const arrowStyles = buildArrowStyles(\n showArrow && position !== null,\n resolvedPosition.side,\n resolvedPosition.arrowOffset\n );\n\n const handleOpen = useCallback(() => {\n if (disabled) {\n return;\n }\n if (isControlled) {\n onOpenChange?.(true);\n } else {\n setInternalOpen(true);\n onOpenChange?.(true);\n }\n }, [disabled, isControlled, onOpenChange]);\n\n const handleClose = useCallback(() => {\n if (isControlled) {\n onOpenChange?.(false);\n } else {\n setInternalOpen(false);\n onOpenChange?.(false);\n }\n }, [isControlled, onOpenChange]);\n\n const handleContentPointerDown = useCallback(\n (event: React.PointerEvent) => {\n event.stopPropagation();\n },\n []\n );\n\n const handleContentClick = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation();\n },\n []\n );\n\n useLayoutEffect(() => {\n if (!open) {\n setPosition(null);\n return;\n }\n if (!triggerRef.current || !contentRef.current) {\n return;\n }\n\n positionUpdateIdRef.current += 1;\n const updateId = positionUpdateIdRef.current;\n\n const updatePosition = () => {\n if (!triggerRef.current || !contentRef.current) {\n return;\n }\n const triggerRect = triggerRef.current.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n if (positionUpdateIdRef.current === updateId) {\n setPosition(\n calculatePopoverPosition({\n triggerRect,\n contentSize: { width: contentRect.width, height: contentRect.height },\n viewport: { width: window.innerWidth, height: window.innerHeight },\n preferredSide: side,\n align,\n gap: 8,\n padding: 8,\n arrowInset: 8,\n })\n );\n }\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n return () => {\n positionUpdateIdRef.current += 1;\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n };\n }, [open, side, align]);\n\n return (\n <>\n <div\n ref={triggerRef}\n onClick={handleOpen}\n style={{ cursor: disabled ? \"not-allowed\" : \"pointer\", display: \"inline-block\" }}\n className={className}\n >\n {trigger}\n </div>\n\n {open &&\n createPortal(\n <>\n <div style={overlayStyle} onClick={handleClose} />\n <div\n ref={contentRef}\n style={{\n ...(unstyled ? contentUnstyledStyle : contentBaseStyle),\n ...(unstyled ? {} : { padding: padding ?? defaultPadding }),\n top: resolvedPosition.top,\n left: resolvedPosition.left,\n visibility: position ? \"visible\" : \"hidden\",\n }}\n onPointerDown={handleContentPointerDown}\n onClick={handleContentClick}\n data-side={resolvedPosition.side}\n >\n {arrowStyles && (\n <>\n <div style={arrowStyles.border} />\n <div style={arrowStyles.fill} />\n </>\n )}\n {children}\n </div>\n </>,\n document.body\n )}\n </>\n );\n}\n","/**\n * @file Toggle primitive component\n *\n * A minimal toggle/switch component.\n */\n\nimport { useCallback, type CSSProperties } from \"react\";\nimport { colorTokens, fontTokens } from \"../design-tokens\";\n\nexport type ToggleProps = {\n readonly checked: boolean;\n readonly onChange: (checked: boolean) => void;\n readonly label?: string;\n readonly ariaLabel?: string;\n readonly disabled?: boolean;\n readonly className?: string;\n readonly style?: CSSProperties;\n};\n\nconst containerStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n cursor: \"pointer\",\n};\n\nfunction getTrackBackgroundColor(checked: boolean): string {\n if (checked) {\n return `var(--accent-secondary, ${colorTokens.accent.secondary})`;\n }\n return `var(--bg-tertiary, ${colorTokens.background.tertiary})`;\n}\n\nconst trackStyle = (checked: boolean, disabled: boolean): CSSProperties => ({\n position: \"relative\",\n width: \"28px\",\n height: \"16px\",\n borderRadius: \"8px\",\n backgroundColor: getTrackBackgroundColor(checked),\n transition: \"background-color 150ms ease\",\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n flexShrink: 0,\n});\n\nconst thumbStyle = (checked: boolean): CSSProperties => ({\n position: \"absolute\",\n top: \"2px\",\n left: checked ? \"14px\" : \"2px\",\n width: \"12px\",\n height: \"12px\",\n borderRadius: \"50%\",\n backgroundColor: \"#ffffff\",\n transition: \"left 150ms ease\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.2)\",\n});\n\nconst labelStyle: CSSProperties = {\n fontSize: fontTokens.size.md,\n color: `var(--text-secondary, ${colorTokens.text.secondary})`,\n userSelect: \"none\",\n};\n\n/**\n * Toggle switch input.\n */\nexport function Toggle({ checked, onChange, label, ariaLabel, disabled, className, style }: ToggleProps) {\n const handleClick = useCallback(() => {\n if (!disabled) {\n onChange(!checked);\n }\n }, [checked, onChange, disabled]);\n\n return (\n <div\n style={{ ...containerStyle, ...style }}\n className={className}\n onClick={handleClick}\n role=\"switch\"\n aria-checked={checked}\n aria-label={ariaLabel ?? label}\n >\n <div style={trackStyle(checked, disabled ?? false)}>\n <div style={thumbStyle(checked)} />\n </div>\n {label && <span style={labelStyle}>{label}</span>}\n </div>\n );\n}\n","/**\n * @file FieldGroup layout component\n *\n * A labeled group for form fields with Figma-style compact layout.\n * Supports inline (single-line) and stacked layouts.\n */\n\nimport { type ReactNode, type CSSProperties } from \"react\";\n\nexport type FieldGroupProps = {\n readonly label: string;\n readonly children: ReactNode;\n readonly className?: string;\n readonly style?: CSSProperties;\n readonly hint?: string;\n /**\n * Inline layout: label on left, content on right (single line).\n * Use for simple inputs like X, Y, Width, Height.\n */\n readonly inline?: boolean;\n /**\n * Label width for inline layout (default: 40px).\n * Helps align labels in adjacent fields.\n */\n readonly labelWidth?: number | string;\n};\n\n// =============================================================================\n// Stacked Layout Styles (default)\n// =============================================================================\n\nconst stackedContainerStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n};\n\nconst stackedLabelStyle: CSSProperties = {\n fontSize: \"11px\",\n fontWeight: 500,\n color: \"var(--text-tertiary, #737373)\",\n lineHeight: 1.2,\n};\n\nconst stackedContentStyle: CSSProperties = {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"6px\",\n};\n\n// =============================================================================\n// Inline Layout Styles (Figma-style single line)\n// =============================================================================\n\nconst inlineContainerStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n minHeight: \"28px\",\n};\n\nconst inlineLabelStyle = (width?: number | string): CSSProperties => ({\n fontSize: \"11px\",\n fontWeight: 500,\n color: \"var(--text-tertiary, #737373)\",\n flexShrink: 0,\n width: width ?? 40,\n minWidth: width ?? 40,\n});\n\nconst inlineContentStyle: CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\n// =============================================================================\n// Shared Styles\n// =============================================================================\n\nconst hintStyle: CSSProperties = {\n fontSize: \"10px\",\n color: \"var(--text-tertiary, #737373)\",\n opacity: 0.8,\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Labeled group of related fields.\n */\nexport function FieldGroup({\n label,\n children,\n className,\n style,\n hint,\n inline = false,\n labelWidth,\n}: FieldGroupProps) {\n if (inline) {\n return (\n <div style={{ ...inlineContainerStyle, ...style }} className={className}>\n <span style={inlineLabelStyle(labelWidth)}>{label}</span>\n <div style={inlineContentStyle}>{children}</div>\n {hint && <span style={hintStyle}>{hint}</span>}\n </div>\n );\n }\n\n return (\n <div style={{ ...stackedContainerStyle, ...style }} className={className}>\n <div style={{ display: \"flex\", alignItems: \"baseline\", gap: \"6px\" }}>\n <span style={stackedLabelStyle}>{label}</span>\n {hint && <span style={hintStyle}>{hint}</span>}\n </div>\n <div style={stackedContentStyle}>{children}</div>\n </div>\n );\n}\n","/**\n * @file FieldRow layout component\n *\n * A horizontal row for multiple form fields.\n */\n\nimport { type ReactNode, type CSSProperties } from \"react\";\n\nexport type FieldRowProps = {\n readonly children: ReactNode;\n readonly className?: string;\n readonly style?: CSSProperties;\n readonly gap?: number;\n};\n\nconst rowStyle = (gap: number): CSSProperties => ({\n display: \"flex\",\n alignItems: \"center\",\n gap: `${gap}px`,\n});\n\n/**\n * Horizontal row for grouping fields.\n */\nexport function FieldRow({\n children,\n className,\n style,\n gap = 8,\n}: FieldRowProps) {\n return (\n <div style={{ ...rowStyle(gap), ...style }} className={className}>\n {children}\n </div>\n );\n}\n"],"names":["containerStyle"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import * as r from "react";
3
3
  import r__default, { useCallback, memo, forwardRef, useRef, useMemo, useState, useContext, createContext, useEffectEvent, useEffect } from "react";
4
4
  import { c as colorTokens, f as fontTokens, r as radiusTokens, s as spacingTokens } from "./tokens-8pNwp6o5.js";
5
- import { S as Select, B as Button } from "./Select-CbNVWrAT.js";
6
- import { P as Popover, I as Input, F as FieldGroup, T as Toggle, a as FieldRow } from "./FieldRow-tn4u5tyR.js";
5
+ import { S as Select, B as Button } from "./Select-CZTIxJJq.js";
6
+ import { P as Popover, I as Input, F as FieldGroup, T as Toggle, a as FieldRow } from "./FieldRow-ChX-oQj4.js";
7
7
  import { d as deg, p as pct } from "./units-BcSb2Y1_.js";
8
8
  import { S as SCHEME_COLOR_NAMES, a as SCHEME_COLOR_NAME_LABELS, b as SCHEME_COLOR_VALUE_LABELS } from "./color-aUUsdyzk.js";
9
9
  import { a as PATTERN_PRESETS, P as PATTERN_LABELS } from "./fill-BWZ3GduB.js";
@@ -4967,4 +4967,4 @@ export {
4967
4967
  y$1 as y,
4968
4968
  z$6 as z
4969
4969
  };
4970
- //# sourceMappingURL=FillEditor-tMpg9XZc.js.map
4970
+ //# sourceMappingURL=FillEditor-FTmptP_m.js.map