What's New
Overview of delivered features. Every behavior change must add a line here (see Documentation Conventions).
Version 1.38.0
- Condition groups in rules (TASK-73): the + Group button in the WHEN block builds logic such as (A and also B) or (C or D). Each group has its own "all match / at least one matches" toggle, the link between groups has its own toggle, and the "Reads as" sentence shows parentheses. Old rules keep working as a single group; with one group left the rule returns to the simple form. See Condition Groups.
- Notifications and change confirmation in rules (TASK-12): new continuous-rule actions Show notification (a bar above the form with a Got it button) and Confirm change (a modal dialog; Undo change reverts the field to its previous value). They fire only when the conditions start to hold after a change, never on form load; the revert does not reopen the dialog. Texts can be translated on the Translations tab.
Version 1.37.0
- Column formatting in list views (TASK-68, Pro): the List actions tab can give list columns badges, a progress bar, a date alert or a person format (the same editor as for Related items). The format is written as native SharePoint column formatting (
CustomFormatter) and works in every view and in the mobile app. Foreign formatting is confirmed and backed up before it is overwritten (Restore original), changes outside FormCraft are detected by a hash, and Reset to default removes the formatting. See Column formatting in list views. - Graphical editor for Update item values (TASK-66):
updateValuesare entered as field + value rows matching the field type, with a picker for the tokens@today,@me,@meIdand the placeholder{Title}; JSON stays available as a switch. Tokens are case-insensitive and{Field}is filled from each selected item. See List buttons and actions.
Version 1.36.0
- Related Documents: deleting files (
allowDelete): the new Allow deleting files option adds a Delete button to every file. After confirmation the file is moved to the site recycle bin (not deleted permanently) and the list refreshes; without permission the SharePoint error is shown. Off by default. - AI assistant: reports response properties that the schema dropped (invented keys); a drop in scripts and buttons requires confirmation just like a drop in fields and rules; a saved selection of related lists is extended with lists used in the form; related lists are no longer loaded twice and show a loading indicator; the check of a large response is deferred so typing does not lag.
- Display: the Location field shows a View on map link in Display mode.
- Error localization: internal error messages of the services (saving and loading an item, attachments, 403/404/412 permissions, column creation, uninitialized services) are shown in the form language (cs, en, de, sk).
- Technical: the extended column property selection (Choices, LookupList...) is used by
getListColumnsonly for the AI assistant; unused UI texts were removed (inspOf12,cbPlacement*,cbShownIn*).
Version 1.35.0
- New layout of the AI Assistant tab: the context (mode, list, related lists) is a collapsed bar at the top; the Edit context link expands it to the mode choice, and Save as default stores the mode and the list selection in the configuration. Below it, two columns sit side by side: 1 Request for the AI (recipes, request, a Hand over to the AI card with the downloaded file as the main path) and 2 AI response and check with an iteration counter. On narrower screens they are stacked.
- Choosing related lists: selected lists and libraries are chips with a column count and a remove button. Add list / library opens a picker with search, Lists and Document libraries groups and a Used in the form badge (lookup target, source of a Related Items or Related Documents widget). When the form uses a list that is not selected, the bar shows a warning.
- Response check in cards: the response can be pasted from the clipboard or dropped as a .json/.md/.txt file; after pasting, a summary (character count, joined code blocks) and the cards Blocking apply (schema errors with their path, a Copy errors for the AI button for the next iteration, risk confirmations), Missing in SharePoint (creation state of each column) and Summary of changes (before → after tiles with the delta) appear. A sticky bar at the bottom shows what still blocks applying.
- Document preview fix: moving the pointer from the document name into the preview no longer makes the card jump or shrink (BUG-27).
Version 1.34.0
- Document preview near the window edge: the hover preview of a related document is placed on the side of the row (below, above, right, left) with the most room and is scaled down to the available space. In the list dialog it is no longer cut off on the right and the Pin button stays visible.
- Configure any field from the canvas: the gear icon on every field (not only on Related Items, Related Documents, Repeating Table and Version History) opens a dialog with the same settings as the side panel and a live preview of the field. Changes are applied only with Save as a single undo step; dialogs have a Close (X) button in the header that behaves like Cancel.
- Saving does not close the builder: after the configuration is saved the builder stays open, a Configuration saved message is shown and the form behind it re-renders with the new configuration. On failure an error message is shown and the builder stays open.
- Faster form loading, smaller download: the form no longer downloads the texts of all languages and of the builder. The form entry bundle is about 370 kB smaller; English, German and Slovak texts are downloaded only when needed (in parallel with the form data) and builder texts only when the builder opens. The form, its language switcher and the builder appear in the right language straight away. List command bar dialogs download only the texts of their language instead of the whole dictionary.
Version 1.33.0
- Faster form opening: the item is loaded in parallel with the configuration (when the form of the same list is opened again), the configuration file is downloaded only once and the backup existence check runs only for designers. The form entry bundle is smaller (the Process Stepper and KPI widgets and column creation load on first use). The form always renders the current configuration from the server.
- Document preview in a dialog: the hover preview of a related document now fits the window (also inside a dialog or a small window) and has an Open in new tab link in its header.
Version 1.32.1
- Read-only Process Stepper source column: when the same field appears on the form more than once (for example on two tabs) and only one copy had the read-only lock, the field and the stepper stayed editable. The configured lock now applies when any copy of the field has it.
- Hide the built-in Edit command: the new
hideDefaultEditoption in the form-in-dialog settings hides the Edit command (keyedit, not Quick edit) via the formatting of public views. See Form in a dialog from the list view.
Version 1.32.0
- Form dialog from a list action (BUG-25): the Open form list action dialog has a single close button (the X in the title bar; the form inside has its own Close/Save), shows the selected item title (otherwise the action title) and the content is no longer clipped on the left. See List buttons and actions.
- Opening the form in a dialog from the list view (TASK-79): new
listViewDialogoptions on the List actions tab: a New command in the command bar, Open in dialog / Edit in dialog for one selected item, and hiding the built-in New via view formatting (only for lists excluded from offline sync). Workaround for Microsoft bug sp-dev-docs#10996. See Opening the form in a dialog. - Document preview no longer closes too early: the quick preview of a related document stays open for about 1 s after the mouse leaves (previously 0.2 s), so you can comfortably move into it. See Related documents.
- Clickable stepper only with an editable source column: steps of the interactive process stepper are clickable only when the source column is in the layout of the current mode, is not read-only in the field settings and is not read-only in SharePoint (hidden is fine). The designer warns when the condition is not met. See Process stepper.
Version 1.31.0
- Interactive process stepper (TASK-26): options
stepperConfig.interactive,confirmStepChangeandconfirmMessage. In Edit and New mode, clicking a step writes its value into the source column (optionally after confirmation); nothing is saved automatically. See Process stepper. - Coloured choice badges in display mode (TASK-76): a Choice field has an optional
choiceColorsmap (value to colour). In the read-only display each value gets a badge in its own colour; unmapped values stay grey-blue. Set it in the field inspector. See Choice. - Unified after-save message (TASK-17): the confirmation message (
afterSaveConfig.message) is now shown in the form as a green banner instead of a browseralertfor close, redirect and the related-items dialog. Navigation follows after 1.5 s or when the user clicks Continue; without a message it is immediate. See After-save behavior. - Resizable document preview (TASK-67): the quick preview of a related document can be resized by dragging its corner or with the arrow keys (20 px, 80 px with Shift); double-click restores the default; the size is remembered in the browser. The Pin / enlarge button opens the document in the dialog. See Related documents.
Version 1.30.1
- Faster list command bar button (TASK-69): the entry bundle of the command bar extension shrank from about 1,066 kB to about 27 kB (minified). Heavy parts (permission check, dialogs, designer, list actions) load lazily after the button is shown, so the Open FormCraft 365 editor button appears without a noticeable delay. Behavior is unchanged.
Version 1.30.0
- Multiple display conditions for custom buttons (TASK-75): a button can have a list of conditions (
conditions) combined as all match or at least one matches (conditionMatch), for example Status = "Ke schválení" and the user is in the "Schvalovatelé" group. The original singleconditionkeeps working; editing it in the designer migrates it toconditions. See Buttons.
Version 1.29.0
- List hardening on activation (TASK-70): the Custom form dialog now offers (enabled by default) disabling list offline availability and quick edit (grid view). Offline availability blocks list buttons and actions for users with Microsoft Lists sync; quick edit bypasses form rules. Failure to update these settings is only a warning; activation still succeeds. On deactivation, both settings can be restored.
- Warning in designer: the List Actions tab warns when the list is available offline and provides an Exclude list from sync button to fix it. New optional method
FormDataProvider.getListHardening / setListHardening. - Documentation: Troubleshooting (Microsoft Lists sync) and Installation describe both options and note that FormCraft rules only apply inside the form.
- Command bar button label (TASK-72): the list command bar button is now named "Open FormCraft 365 editor" (cs "Otevřít editor FormCraft 365").
Version 1.28.3
- Related Items and Documents (BUG-24): after saving an item opened from the Related Items or Related Documents widget, the dialog loaded all of SharePoint. Now the dialog closes after saving and the table refreshes so edited values are visible.
Version 1.28.2
- fc.debug diagnostics in production build:
[FormCraft]logging usesconsole.warnbecause production minification stripsconsole.info. Enable Preserve log in the console. See Troubleshooting. - Documentation: Troubleshooting now includes the "Microsoft Lists sync" cause (SPFx does not start at all, how to identify and mitigate it) and checking for disabled Tenant Wide Extensions entries. The Tenant Wide Extensions upgrade procedure has been corrected: SharePoint adds missing entries by name, does not modify or delete existing ones, and obsolete entries (
FormActivatorCommandSet-ContextMenu-*) must be deleted. Updated BUG-23 rationale (splitting into two components remains; the claim about two instances of one component was not proven).
Version 1.28.1
- Distinguishing bars in the designer: "Bar" in the Bar & Buttons tab is now named "Form Bar". The list Command Bar and item context menu are named more accurately in the List Actions tab. The "Where and when it appears" card has a help note with a "Go to List Actions" link.
- "Open designer" button randomly disappearing from list command bar (BUG-23): the command bar and context menu used a single Command Set component distinguished only by a registration property. Assumed cause (see 1.28.2): the command bar occasionally behaved like a context menu after clearing site data or refreshing the page. Context menu actions are now handled by a separate component FormListActionsContextMenu with its own Component Id; the command bar is always the command bar.
- Diagnostics: after running
localStorage.setItem("fc.debug","1")and refreshing the page, both components log[FormCraft]lines to the console (properties, permissions, command and slot visibility). See Troubleshooting. - Required post-upgrade step: in the Tenant Wide Extensions list in the App Catalog, delete the 3 old context menu entries
FormActivatorCommandSet-ContextMenu-*; SharePoint adds the newFormListActionsContextMenu-*entries (Component Ida9998067-8e06-423f-b8a0-3177988f3a42) automatically. Without this, context menu actions will not appear. Browser and PowerShell steps are in Installation.
Version 1.28.0
- Bar & Buttons tab redesign (TASK-71): the tab is now split into a button list on the left and details on the right. The list shows system buttons (mode badge, view switcher) and custom buttons with drag handles, arrows, and a condition badge. Details offer label, icon, appearance as four tiles, placement and modes as chips, condition summary, and on-click steps (confirmation dialog, actions, validation, and save) in execution order. Added Duplicate and Delete actions (with confirmation if the button is embedded in the form). Bar and footer previews open in a side panel, and clicking a custom button selects it in the list. The saved configuration format is unchanged. See Buttons.
Version 1.27.0
- Dedicated List Actions tab (TASK-65): the custom list actions editor (
listActions) moved from the end of the Bar & Buttons tab into a separate List Actions designer tab. - Confirmation button labels: the list action confirmation dialog has optional labels for the confirm button (
confirmation.confirmLabel) and Cancel button (confirmation.cancelLabel); empty = default text. Labels can be translated in the Translations tab. - Product brand in designer header: the designer dialog header now displays the product name FormCraft 365 before the window title.
Version 1.26.2
- Designer opened from list command bar (BUG-22): after saving the configuration in the designer opened from the list command bar, the page reloads upon closing so custom list actions take effect on the bar and context menu and the "Open designer" button does not disappear.
Version 1.26.1
- Widget configuration dialog: the preview no longer re-renders and reloads on every edit, which caused flickering and got in the way. It is shown via the Show preview button, updated after further edits via Refresh preview (until then, the dialog warns that the preview does not reflect the latest changes), and can be hidden again.
- Documentation: corrected the Tenant Wide Extensions upgrade procedure. SharePoint does not add or modify entries during a package upgrade, so Installation describes manual verification in the browser (adding missing entries and deleting obsolete ones). Troubleshooting gained a procedure for when the "Custom form" button is missing from the command bar.
Version 1.26.0
- Launch designer directly from list ribbon (TASK-15): if FormCraft 365 is active on the list and the user has admin permissions, the command bar button shows an Open designer option and opens the visual form editor directly over the list without needing to open an item; the activation dialog remains accessible from the designer.
- Custom actions in list command bar and context menu (TASK-58): in the Bar & Buttons tab, up to 10 custom buttons can be defined for the list Command Bar and item context menu (
listActions) with selection condition (none,single,multiple), optional data visibility condition (Pro edition only), confirmation dialog, and actions (updateItem,openFormsupporting?fcTab=,printsupporting?fcPrint=1,openUrl,triggerFlow,runScriptgoverned by script policy). - Security and
triggerFlow+triggerFlowFieldspayload: webhook URL is restricted to HTTPS and allowed Power Automate / Azure Logic Apps hosts (*.logic.azure.com,*.powerplatform.com,*.api.powerplatform.com). Only itemIDand optionally fields listed intriggerFlowFieldsare sent to the flow (a change from the previous full row—existing flows must be updated to re-fetch the item from SharePoint byIDand verify state and permissions). - List action translations: button labels and confirmation dialog texts (
title,confirmTitle,confirmMessage) can be translated in the Translations tab as well as directly in the Bar & Buttons tab when the designer language is switched (i18nConfig.translations[lang].listActions). - Extension upgrade: because
FormActivatorCommandSetis now registered separately for the command bar and context menu, upgrading from an older version requires deleting the old entry in Tenant Wide Extensions and re-registering the extension. Step-by-step instructions including a PnP script are in Installation.
Version 1.25.0
- Related Items and Documents: merged column editor: columns are organized into two blocks. Available columns (compact searchable grid) is used only for checking/unchecking. Displayed columns has ordering (drag-and-drop or arrows), custom label, removal, and for Related Items also cell formatting with expandable settings on a single row. Saved configuration (
viewFields,columnLabels,columnFormatting) is unchanged.
Version 1.24.1
- Widget configuration dialog: column settings (format, badge colors) no longer overlap with the preview. The entire dialog content scrolls with a single scrollbar.
Version 1.24.0
- Related Items and Documents: column ordering: in widget configuration, the order of displayed table columns can be changed by dragging a row or using up/down arrows in the Column order list. The order is saved to
viewFields; older configurations are unchanged.
Version 1.23.1
- Widget configuration dialog: the preview no longer overflows the dialog; content scrolls inside. On the Columns tab, the custom label field is right next to the column name, so checking a column does not change list height or cause the dialog to jump.
Version 1.23.0
- Related Items: advanced filter (TASK-62, details): the large configuration dialog has a new Filter tab with a visual condition builder (AND/OR, nested groups, Today tokens with day offset and Current user, form field value) and an optional expert OData expression. The filter combines with the item relationship (
relatedItemsConfig.filter,customODataFilter), the widget reloads when the referenced form field changes, and both the live preview and compiled expression update as you edit. Older configurations are unchanged.
Version 1.22.0
- Related Items: visual column formatting (TASK-55, details): in the large configuration dialog, a column can be rendered as a badge, progress bar, due date alert, or person with initials and email link (
relatedItemsConfig.columnFormatting). Colors are named presets, without custom HEX values. Older configurations are unchanged.
Version 1.21.0
- Designer: the Version History widget now also has a large configuration dialog, with Display and Tracked Columns tabs and a live preview. It opens from the inspector or via the Configure icon on the canvas.
Version 1.20.1
- Internal: translations split into per-language files (
i18n/keys.ts,cs.ts,en.ts,de.ts,sk.ts), with no functional changes.
Version 1.20.0
- Related Documents: folder mode query error (BUG-07): when a folder query failed (permissions, throttling, list view threshold, network), the widget previously silently showed an empty list. Now it displays a localized error; an empty list is returned only on HTTP 404.
- Large widget configuration dialog (TASK-56, details): Related Items, Related Documents, and Repeating Table can be configured in a spacious tabbed dialog (Data Source & Binding, Columns, Sorting & Behavior), with draft editing (Save = single Undo step, Cancel and Esc discard) and a live preview of the actual widget. Opens via a button in the inspector or the Configure icon on the widget card. No configuration schema change.
Version 1.19.1
- Footer preview fix: the preview in the "Bar & Buttons" tab showed the Print button in the footer (and Save/Cancel in Edit mode), which are not in the SharePoint form footer—they are only in the command bar. The preview now shows only custom footer buttons.
Version 1.19.0
- Button placement: Bar / Footer / In Form (TASK-57): new optional property
customButtons[].placements(multiple locations simultaneously), with three checkboxes in the editor instead of a dropdown. Checking "In Form" prompts for a section and inserts the widget; unchecking removes the widget after confirmation (single Undo step); the option shows which sections contain the button; a warning is shown if no placement is selected. The footer displays the button regardless of whether it is also a widget. The Bar & Buttons tab shows previews of both the bar and footer. Legacyplacementremains supported and saved forms behave identically.
Version 1.18.0
- Bar & Buttons tab (TASK-52): replaces the Buttons tab. At the top is a live preview of the actual command bar with a mode switcher (Display / Edit / New item); clicking a button in the preview selects it in the editor. Below are system buttons (visibility and label, including Form Settings) moved from the Settings dialog and custom buttons with drag-and-drop ordering.
- Custom button icon: new optional property
customButtons[].icon(presets like tabs); displayed in the command bar and on the button in a section; without an icon, the lightning bolt remains. New optional propertycommandBarConfig.settingsLabel. - Multilingual support: labels edited on the tab in a non-default designer language are written to
i18nConfig.translations[lang](buttons,commandBar);settingsLabelis translatable in the Translations tab.
Version 1.17.1
- SharePoint-style form bar (TASK-06-R): Back is now a "List › Item" breadcrumb above the bar, bar buttons have uniform height, font, and icon, only the primary button (Edit / Save) is filled, and custom header buttons match the size of others. The fallback bar on render error has the same appearance. See command bar.
Version 1.17.0
- Form command bar (TASK-06): top Fluent v9 bar groups Back, Edit, Save, Cancel, Print, and Form Settings. Custom buttons have
placement(section/header/both). The bar is configured in the designer (commandBarConfig), and button labels can be translated in the Translations tab. When the bar is disabled or the form crashes, Form Settings and Back remain available to administrators; customsaveLabelno longer hides the saving state;showPrintButtonagain applies in the SharePoint form; the designer preview omits the Print button. - Print and PDF (TASK-25): all visible tabs print stacked vertically with collapsed sections expanded. Tabs hidden by rules are not printed, and warnings about unloaded fields are printed. Print colors use system colors (no hardcoded hex values).
- Licensing (TASK-37):
updfield (end of update entitlement), key revocation viakidin the package, informational metadatameta.licensedToandmeta.tenantId, production build without sourcemaps. Expiredupdshows the customer name and renewal prompt to designers and hides the Community Free watermark from end users. The designer displays customer, tenant, and validity. See Licensing. - Concurrent configuration edit conflict (TASK-38): every save gets a revision; concurrent edits by another admin trigger a dialog with options to save to history (recommended), load the new version, or overwrite. A second save in the same session no longer reports a false conflict, "Save to history" does not alter the live configuration, and restoring from backup protects others' changes. See designer.
- Tenant-level script policy (TASK-43), fail closed: Storage Entity key
FormCraft365_ScriptsPolicy(allow/deny;denyoverrides the legacy key). Missing or unknown values mean scripts are disabled, so upgrading does not enable scripts for tenants that have not set the policy. Whendenyis active, scripts can still be deleted in the designer. See Script Policy. - Wave 1 code review fixes: secure script defaults, false revision conflicts, printing hidden tabs, Form Settings availability, conflict dialog and license texts in 4 languages (locale-aware dates), license code and unused text cleanup, tests without act() warnings or console output, new inline styles replaced with classes.
Version 1.16.0
- Fix: repeating table sum target field selection (BUG-15): the Write sum to field group is always visible in the table inspector. Without a suitable field on the form or without a numeric column, it is disabled with an explanation. The source column selector always appears when a target is set, and no longer uses the faulty fallback key
cena. A Single line of text field can now also be a target; the sum is written as a machine-readable string (no thousand separators, decimal point). Configurations remain compatible. - Fix: Delete key in designer on tenant (BUG-16): the designer runs inside a dialog in SharePoint, and the Delete shortcut (TASK-30) ignored every dialog, doing nothing. Now it only ignores dialogs that do not contain the designer (e.g., a modal opened above it); all other guards (text inputs, menus, dropdowns, open impact dialog) remain.
- Field data type validation against list columns (TASK-34): a field without
fieldType(e.g., currency in hand-written JSON) silently dropped out of numeric field features. Now the missing type is filled from the column when applying JSON, importing, applying AI suggestions, and in memory on form load (syncConfigWithSchema), and the designer reports the count of filled types (ftcFilled). Incompatible types (checkFieldTypesinbuilder/fieldTypeCheck.ts; allowed alternatives include Note as repeating table, user as people, number as rating) are reported as warnings in the JSON editor and designer bar;ftc*texts in 4 languages. - Version history: date and time format (BUG-17): version and comment timestamps are formatted according to the form language instead of showing raw ISO strings.
- JSON editor reports missing data type while typing: a field without
fieldTypeis listed with the type that will be filled from the column upon applying.
Version 1.15.0
- Product renamed to FormCraft 365 (TASK-23): the user-facing product name is now FormCraft 365 (in the App Catalog FormCraft 365 for Microsoft SharePoint). This applies to solution title and descriptions, component instance titles, designer and activation dialog texts (cs, en, de, sk), form footer, CSOM
ApplicationName, and documentation. Internal names (packagespfx-form-customizer, component IDs,SiteAssets/FormCustomizerpaths, license key prefixSPFXFC-) remain unchanged so existing deployments and saved configurations continue working. - Fix adding column to content type (BUG-00): REST
FieldLinks.Addsearches for the column among site columns and therefore failed to find a list-only column ("Column does not exist"). The field link is now created via CSOM (_vti_bin/client.svc/ProcessQuery) one content type at a time; response errors (ErrorInfo) are reported per content type with the server message, while the column remains in the list. - Correct version in designer: the version label showed 0.0.1 because the component manifest reads the version from the package's
package.json. The version inpackage.jsonis now 1.15.0 and a test ensures it matchespackage-solution.jsonanddocs/assets/manifest.js. - Localization of remaining errors: "Error rendering form" (ErrorBoundary), "Critical form error", form initialization error, missing item ID, default form title, script message close button label, process button editor texts, and default texts in the translation editor now display in the user's language (cs, en, de, sk).
- Date and time format: Date and Time columns in Related Items, Related Documents, and Display mode are formatted according to the form language: date only for Date Only columns, date and time (hh:mm) for Date and Time columns. A date-only value stored at midnight UTC will not display a day early.
- Fix: Edit keeps active tab (BUG-13): switching from Display to Edit (and back) remounts the renderer and always opened the first tab. The host now remembers the active tab (new optional renderer prop
onActiveTabChangeand existinginitialTabId); if the tab does not exist or is hidden in the new mode, the first visible tab opens. - Fix: KPI progress bar ignored target value (BUG-14): a configured
targetFieldtook precedence overtargetValueeven when pointing to the source field itself (value 1000, target 250000 rendered as 1000 / 1000). Such atargetFieldis now ignored and the fixed target applies. - KPI target from another column (TASK-33): the KPI inspector gained a Fixed number / From another column toggle and numeric column picker (new optional property
kpiConfig.targetSource, defaultfixed; older configurations withtargetFieldcontinue working unchanged). The target is read live from the form; an empty or zero target falls back to the fixed number.
Version 1.14.0
- Fix adding column to content type (BUG-00): the field link (
FieldLink) is sent as a documented verbose OData request (Content-TypeandAcceptheadersapplication/json;odata=verbose, body with__metadatatypeSP.FieldLink,FieldInternalName,Hidden,Required). Earlier JSON light variants were rejected by SharePoint. Failures are reported per content type with the server message, while the column remains in the list. - "Custom form" command on list command bar (BUG-09): the command label is localized (default English "Custom form", plus Czech, German, Slovak based on SharePoint language). In the activation dialog status, "List status" is translated (
faListStatus) and the fallback list name is no longer hardcoded in Czech. - Untitled section (BUG-10): a section without a title in the form displays a translated "Section" (
sectionUntitled); fallback names for an untitled tab in the inspector (tabUntitled) and a button widget (customButtonDefaultLabel) were similarly translated. - Version in designer (TASK-31): next to the language switcher in the top bar of the designer is a small label showing the running package version (e.g., v1.14.0.0), tooltip
builderVersionTooltip. The value is supplied by the host via the new optionalappVersionprop.
Version 1.13.0
- Delete key in designer (TASK-30): on the Layout tab, pressing Delete deletes the selected field, widget, or section via the same path as the Delete button (including the rule and script impact dialog). It does not fire when typing in a text field, in an open dialog, or in a menu. After deletion, selection is cleared and Undo (Ctrl+Z) restores it in one step. Delete buttons include the shortcut hint in their tooltip (
layoutDeleteKeyHint, 4 languages). - Fix default width of added field and widget (BUG-08): non-full-width widgets (KPI tile, process button) added from the palette or button editor receive the section's default width (12 / column count), while full-width widgets (banner, image, related items, etc.) remain at 100%. Fields from the palette (both drag-and-drop and + button) already receive the section default width and are covered by tests.
Version 1.12.1
- Fix: a newly created column again failed to attach to the selected content type (HTTP 400 "Value cannot be null. Parameter name: parameters"). The field link is now sent as
{ parameters: { FieldInternalName } }, as SharePoint requires forFieldLinks.Add.
Version 1.12.0
- Choice like in SharePoint (TASK-29), Create Column dialog: instead of two types "Choice" and "MultiChoice", there is a single Choice type with a Display as setting (Dropdown, Radio buttons, Checkboxes (multiple values)) and an Allow fill-in choices checkbox. Checkboxes create a
MultiChoicecolumn. SharePoint: RESTEditFormat(0 / 1) andFillInChoice, SchemaXmlFormat="Dropdown"or"RadioButtons"andFillInChoice. New optionalchoiceFormatandfillIninCreateFieldDefinition;cfChoiceFormat*andcfFillIntexts in 4 languages. - "Choice" type name: Czech ("Volba") and Slovak ("Voľba") column type names in the Create Column dialog, palette, and repeating table column types were unified to match SharePoint.
- Inheriting choice display and fill-in from SharePoint (TASK-29): when adding a Choice / MultiChoice column to the form,
choiceFormat(dropdown/radioperEditFormat,checkboxesfor MultiChoice) andfillIn(perFillInChoice) are written tofieldProps. On form load,fillInis synced from SharePoint;choiceFormatset in the designer is preserved if valid for the column (radio buttons on a multi-value column are replaced with checkboxes). Older configurations without these keys are unchanged. - Choice as radio buttons, checkboxes, and fill-in (TASK-29): Choice fields render according to
fieldProps.choiceFormatas a dropdown, radio buttons (single value), or checkboxes (multiple values, value remains an array of strings). If fill-in choices are enabled on the SharePoint column (fieldProps.fillIn), a final Specify your own value: option with a text input is added; entered text is saved as plain text. A saved value outside the choices is displayed as the fill-in value (or an additional checked item). Required validation works across all views; Display mode and locked fields are unchanged. The field inspector has a Display as option and read-only fill-in info. NewChoiceFieldcomponent,fieldChoiceCustom*andinspChoiceFormat*/inspChoiceFillIn*texts in 4 languages.
Version 1.11.1
- Fix: Designer (BUG-02): the color preset name on the section card (badge and background tooltip) and in the tab inspector always displayed in Czech. Now it uses translations matching the designer language (
colorPresetLabel), like the rest of the designer; saved values (preset key) are unchanged. - Fix: Display mode: a "No" value on a Yes/No field looked like an empty value (gray dash). Now it has a neutral
DismissCircle16Regularicon and "No" text; a dash is shown only for truly missing values (null / undefined). - Fix: in the Create Column dialog, selecting multiple people was not straightforward (a separate "Multiple people" type in the menu). The Person type now has an Allow multiple selections checkbox that creates a multi-value column (REST
AllowMultipleValues, SchemaXmlType="UserMulti"andMult="TRUE"); the separate menu entry was removed.cfAllowMultipletext in 4 languages. - Fix: a Currency column created from the designer had no currency format. The Create Column dialog now offers Currency format (default site locale, otherwise CZK 1029, EUR 1031/1051, USD 1033, GBP 2057, PLN 1045) and sends
CurrencyLocaleId(REST) orLCID(SchemaXml). New optionalcurrencyLocaleIdinCreateFieldDefinitionandwebLocaleIdinFormDataProvider; texts in 4 languages (cfCurrencyFormat,cfCurrencyWeb). - Fix: after activating or deactivating a custom form, the change did not take effect until the user manually refreshed the page (SharePoint caches bindings in SPA memory). After a successful change, the Activation dialog shows a notice with a Reload page now button and automatically reloads the page on close (new
faReloadNote/faReloadNowkeys in 4 languages). When opened from the designer, it does not auto-reload to avoid discarding unsaved configuration. - Fix: Related Documents in folder mode: Person and Lookup columns (e.g., "Approved By") now display. Documents in folder mode are queried via library items with a
FileDirReffilter and columns are loaded via$expand(X/Id,X/Title), because SharePoint rejected nested$expandviaListItemAllFieldson/files(HTTP 400). - Fix: creating a column on a list with managed content types did not attach it to the selected content types (SharePoint rejected the request body with
__metadata, HTTP 400). The field link is now sent in the format SharePoint Online accepts (FieldInternalName, withIdandNamefallback).
Version 1.11.0
- Locked fields are readable: fields locked by the
setReadOnlyrule (and unloaded fields) in Edit and New modes no longer render as grayed-out disabled inputs. Text, number, and multi-line text are read-only inputs with full-contrast text; choice, date, Yes/No, person, lookup, taxonomy, rating, location, and calculated fields display their value in a locked box (aria-readonly, label linked viaaria-labelledby). The value remains in the form and does not change. See Locked Fields and setReadOnly. - Display mode: readable fields instead of grayed-out inputs: in Display mode, standard fields render as a label and full-contrast value (choices as badges, Yes/No with icon, people with email, links, locale-formatted numbers and dates, dash for empty values). Required fields in Display mode have no asterisk or Required badge. Respects left-aligned labels and compact spacing. See Item Display.
- Create column from designer: above the field palette is a Create column button (only for users with Manage Lists permission). The dialog suggests an internal name from the display name (editable, validates characters, length, reserved names, and collisions), offers column types and options, and list content types. The new field is inserted into the active section in one Undo step; if adding to a content type fails, the dialog lists affected types and offers Retry. Texts in 4 languages (
cf*keys). - Column creation: provider interface:
FormDataProvidergainedcanCreateFields(Manage Lists permission),currentContentTypeId,getListContentTypes,createField, andaddFieldToContentTypes. The SPFx implementation creates the column with the internal name as Title, renames it to the display name, fetches the actualInternalName, and adds the column only to the selected content types; content type failures are reported separately and the column remains. - AI Assistant: creating missing columns: AI rules no longer forbid new columns. AI may suggest them (
internalNamelowercase without diacritics, max 32 chars, with human-readablecustomLabeland appropriatefieldType) only when no existing column fits the requirement. In response review, each unknown field offers Create column (same dialog, prefilled from suggestion) and for multiple fields Create missing columns (sequential dialog for each field, skippable). Nothing is created without confirmation; buttons are visible only to users with Manage Lists permission. If SharePoint returns a different internal name, references in the AI response (fields, rules, expressions[x]/{x}, buttons,dependsOnField,sourceField,syncSumToField, mode layouts) are renamed byrenameFieldInConfig. Texts in 4 languages (aiCreateColumn,aiCreateMissingColumns). - Designer: field widths adapt to section grid: when changing section column count (1, 2, 3, 4, 6), only fields that had the previous default width or no
colSpanreceive the new default width (12 / columns). Full-width and custom-width fields (e.g., 8) remain unchanged. The change is one Undo step and affects only the active layout (shared / mode). The 6-column option was added to the section inspector. - Fix: Display mode and locked fields (TASK-05 final review): a locked field no longer blocks saving due to an invisible format error (max length and pattern are not validated on locked fields); numbers are not rounded in Display mode or locked boxes; empty values are announced to screen readers as Not filled; locked boxes are keyboard-reachable (Tab) and match input height in compact mode; Display mode values are linked to their labels; object-shaped choice values render properly, lookups without titles do not show numeric IDs, and HTML-formatted multi-line text renders as plain text.
- Fix: Column creation (TASK-08 final review): the Create Column dialog is disabled until content types load and creates nothing on read error; on managed lists, content type selection is always sent and the provider will not create a column without it. Number and Currency with decimal places on lists without managed content types receive the default content type. After successful column creation, creation never reports failure (reload failure is only a warning) and a failed internal name is blocked against duplicates. In the AI tab, column renames are not discarded when editing response text, fields align with actual column types, and the column is added to the field pool (palette, import, and export). Renaming no longer alters
filterByField, and renamestrackedFieldsand tokens only with matched brackets. Internal name suggestions preserve underscores, Note with rich text is expanded consistently in both paths, warnings and Retry errors show in the dialog, and lookup target columns are filtered by type. New texts in 4 languages (cfCtLoading,cfCtLoadFailed,cfWarnIntro,cfRetryFailed,cfCreateFailedCheck). - Fix: Related Items and Documents inspector: audit columns (Author, Editor, Created, Modified, ID, Attachments) are placed at the end of the displayed columns picker under a "System columns" separator (new translation in all 4 languages).
- Fix: Related Documents: custom library columns of type Person and Lookup (including multi-value) are loaded via
$expand(both metadata and folder modes) and displayed as text; previously the query failed with HTTP 400. The column picker in the inspector now also offers these types and Date. - Fix: fields without
customLabeldisplay the SharePoint column title (e.g., "Project Code") instead of the internal name; the priority ordercustomLabel(with translation), column title, internal name also applies to checkboxes, cascading lookups, version history, and error messages. Designer preview and dev sandbox also receive titles. - Fix: tab and section icon keys are matched case-insensitively (
Info,Money,Folder) and aliasescheckmark,check,todo,finance,cash,budget,attach,attachment,files,kpi,analyticswere added. - Fix: Related Documents:
FileLeafRefis treated asnameandFileSizeDisplay/File_x0020_Sizeassize(link with preview and formatted size). - Fix: Related Items: Person and Lookup columns are loaded via
$expandand displayed as text; previously the query failed with HTTP 400. - Fix: Related Items inspector: the displayed columns picker also offers Person (including multi-value), multi-value Lookup, and Date columns (excluding technical and hidden columns, with column type in the label). The relationship column remains restricted to the default set and Related Documents is unchanged.
- AI Assistant: rules include a list of valid icon keys (generated from code), a recommendation of
["name","size"]forrelatedDocumentsConfig.viewFields, and instructions to setcustomLabelonly when a different name than the column title is needed. - Build and tests: tests run without coverage (
config/jest.config.json) and on half the CPU cores; newnpm run test:quickscript without clean build. Fullnpm run verifytakes ~1.5 minutes instead of 5–6 minutes. - Build and tests: stable async tests: intermittent failures under load were caused by slow
getByRole/findByRolequeries by name in jsdom (a single query exceeded the timeout); Create Column dialog tests query buttons by text. Global limits are insrc/services/testSetup.ts. - AI Assistant: cards for complex widgets (repeating table, related items and documents, KPI, stepper, version history, cascading lookup, people, taxonomy, image, attachments, button, text block) include a minimal valid configuration example so AI generates them more accurately.
- Inspector: section description: an optional description can be added to a section in the inspector, rendered below the heading. The text is translatable (editing in another designer language writes to translations).
- Inspector: recipient type for person field: "Users only" or "Users and groups" option (
peopleConfig.principalType) without needing to edit JSON. - Inspector: Related Items: "Maximum number of items" field (
rowLimit, 1 to 100). - Inspector: choice order: choice order can be reordered on Choice fields (values remain from SharePoint and sync automatically).
- Inspector: default value: type-aware
defaultValueeditor (text, number, yes/no, date with@Today, choice, user with@Me). Fix:@Todayon a date-time field now displays properly (YYYY-MM-DDT00:00). - Inspector: repeating table: column editing (label, type, required, width, summary, choices, cell default value), column reordering,
minRows,maxRows, Add row button label, and target column selection for sum sync. Column and button labels save to translations when in another designer language.
Version 1.10.1
- Fix: AI Assistant tab layout: the tab now uses the full designer width. On wide screens, context (mode and related lists in a compact list) is on the left and the prompt field with the AI response below it is on the right; on narrow screens, a single column is shown. Prompt and response fields are significantly taller, fill the frame, and are vertically resizable.
Version 1.10.0
- Fix: widgets from palette: items on the Widgets tab in the palette can now be dragged into a section on the canvas (previously only the "+" button worked). Applies to tabs with and without columns and mode layouts; the widget is inserted at the drop target and selected.
- Designer: quick section width toggle: on tabs without columns, section headers gained a 50% | 100% toggle (
updateSectionaction, single Undo step). - Designer: Move to tab: the "…" menu on both fields and sections on the canvas can now move a field or entire section to another tab (single Undo step, including mode layouts). New reducer action
moveSectionToTab. - Designer: widths in percentages: field, section, and column widths display in percentages (e.g., 50%, 67%, 100%) instead of N/12 fractions. The stored
colSpanvalue is unchanged. - AI Assistant: final review fixes: protected settings are stripped from responses before validation and announced; parser handles multiple code fences, continuations cut off mid-token, and triple backticks inside strings; column load failures for the current list are visible (Retry, copy disabled); counts table with labels, highlighted decreases, and large-drop warning; remapping references to renamed button IDs; corrected inaccuracies in the knowledge pack (tokens in buttons,
[ID]in redirectUrl, table column width); localized messages for orphaned references and parse errors; error boundary around the AI tab; prompt size indicator with persistent file download recommendation. - New feature: AI Assistant: new tab in the designer (lazy-loaded, Pro license) builds a prompt for external AI, allows copying or downloading as
form-ai-prompt.md, validates the pasted response, and applies it in one Undo step. See AI Assistant. - AI: response parsing:
ai/responseParser.ts(parseAiResponse) extracts JSON from model output (code fences, multiple consecutive fences, surrounding text, BOM) and distinguishes failure reasons:empty,truncated(truncated JSON even inside strings),placeholder(//,/*,...outside strings), andsyntax. - AI: preparing suggestion:
ai/applyAiConfig.ts(prepareAiConfig): ID repair (fills missing IDs; in edit mode restores original IDs only on unambiguous name match), schema validation, preserving protected fields from original (security, storage lock, languages, AI settings), before/after counts (including mode layouts), large-drop warnings, orphaned references, unknown fields, and modified scripts. Nothing is silently deleted. - AI: prompt building:
ai/promptBuilder.ts(buildAiPrompt: knowledge pack, lists and columns; in edit mode current configuration without protected fields; in new form mode without configuration;deriveRelatedSourcespre-selects lookup and Related Items/Documents targets even from mode layouts;PROMPT_RECIPES,buildAttachmentShortInstruction). Item values never enter the prompt. - AI: rules and knowledge pack:
ai/promptRules.ts(hand-written model rules: response format, ID preservation,colSpancheat sheet, system fields, rules vs. scripts) andai/knowledgePack.ts(buildKnowledgePack(), guarded byKNOWLEDGE_PACK_BUDGET_CHARS). OldAI_FORM_GENERATOR_GUIDE.mdreplaced with a link. - AI Assistant (knowledge):
ai/schemaWalker.tsmodule (Zod schema traversal), skeleton ofai/schemaDocs.tsandai/featureCards.ts, example validationai/exampleValidation.ts;check-docsreports features without a card (see AI knowledge pack (Czech)). - AI: schema docs and cards for all features:
ai/schemaDocs.tsdocuments every configuration schema path (including nested properties and mode layouts);ai/featureCards.tscontains a card for every field, widget, action, operator, trigger, button action, expression function,ctxmember, and form setting. Coverage test runs at full schema depth andcheck-docsrequires a card for every feature. - AI Assistant (preparation):
FormDataProvider.getListColumnsadditionally returns requiredness, choices, lookup target list, multi-value flag, hidden flag, and read-only flag; newai/columnFilter.tsmodule builds column metadata for AI (without item values).getListColumnshas an optionalincludeAllparameter for a full field listing. - Licensing: new
allowAiAssistantflag (Community no, Pro yes) and optionalaiAssistantconfiguration property with a list of related sources. No UI yet; older configurations load unchanged. - Fix: regex validation error (Email, ZIP, URL, custom pattern) on an optional field disappeared right after typing; now it stays until the value is valid. Clearing stale errors after rule changes applies only to requiredness errors, not format errors.
- Fix: sections in the designer can be dragged with the mouse even on tabs without column mode (previously only sections in columns had a drag handle; otherwise only arrows worked). Drop target logic is in pure function
resolveSectionDrop. - Fix: list command bar no longer flickers twice due to the "Custom form" command: visibility is determined synchronously from page permissions and cached
sessionStorageresult,raiseOnChangeis called only on actual change, and the estimate uses the same criterion (ManageWeb) as the async check. - Documentation: manual suite of six prompts for evaluating AI Assistant quality (instructions for ChatGPT, Claude, and Microsoft 365 Copilot, expected output properties, and evaluation table), see AI Assistant Quality Evaluation (Czech).
- Fix: configuration storage lock reads
FileRefandHasUniqueRoleAssignmentsfor each item individually; version 1.9.0 on SharePoint reported "Configuration storage is not locked" (missingFileRef).
Version 1.9.0
- Documentation: updated
DEPLOYMENT.md,spfx-form-customizer/README.md, andManage-FormCustomizer.ps1script (Node 22, Heft instead of gulp, activation on content types, links todocs/admin). - Splitting large components: renderer, designer shell, field inspector, rule editor, and layout split into smaller modules; full designer localization (CR-23, CR-26, CR-28).
- Theme and performance: designer colors from SharePoint theme, smaller bundle, lazy-loaded widgets,
postMessageverification (CR-15, CR-24, CR-27). - Data: atomic taxonomy save, search in large lookups, Related Documents protection (CR-17, CR-18, CR-19).
- Build and tests: unified dependency versions between core and production, component tests, CI templates (CR-21, CR-22).
- Security: expressions without
eval, tenant opt-in scripts (CR-03, CR-04A); locked configuration storage for owners and designer group (CR-02). - Debugging and runtime performance: rule and script debug mode, rules and widgets watch only dependent fields (CR-10, CR-18).
- Dark theme: SharePoint dark theme support, tokens instead of hardcoded colors, shared designer and runtime grid (CR-14, CR-16).
- Configuration: schema versioning, configuration loss protection, history, PBKDF2 password hashing (CR-13, CR-05).
- Designer: rule protection on delete with impact dialog, Undo step merging, dirty state (CR-11, CR-12, CR-25).
- Concurrency: optimistic concurrency via ETag and conflict dialog (CR-01).
- Licensing: offline license key for tenant or site collection.
- Fix: values from
onLoadrules (setValue,setExpression) are saved in Edit mode, just like values from theonFormLoadscript. - Fix: SharePoint multi-choice columns (
MultiChoice) can be edited as multi-value choices (choicefield withallowMultiple); previously they rendered as read-only text. Saves an array of strings; older configurations are fixed on load. - Fix: an
onBeforeSavescript error (exception or customctx.notify(…, "error")) is shown to the user and not overwritten by a generic message; the generic message is translated into all languages. - Fix: a custom button shown in Display mode is active (button widget is no longer disabled by forced read-only). In Display mode, only
callFunctionruns; write actions andsubmitFormare skipped with a console warning. - Fix:
@Todayin a rule condition value represents today's date; the field is compared as a date without time (equals,notEquals,greaterThan,lessThan). - Fix: document deletion option (
allowDelete) on the Related Documents widget was hidden and removed from the sample configuration because deletion is not yet implemented; the property remains in the schema for older configurations. - Licensing: Community limits apply in the designer: locked cascading lookup in palette and inspector (Pro badge; existing cascades can still be edited and removed), read-only script editor without Pro license, and warnings for cascades and scripts. Nothing is blocked at runtime; form administrators see a banner showing what exceeds the license.
- Fix: the "Custom form" command on the list command bar is registered for templates 120 and 1100 as well, matching the activation dialog (previously only 100).
- Fix: the Text Block widget renders
heading(block heading) above the content; a Block Heading field was added to the inspector and inspector edits no longer clear heading. - Fix: custom button
confirmTitledisplays as the confirmation dialog title (instead of a browser native alert); without it, a translated default title is used. Confirm Title field added to the button editor. - Fix: Image widget documentation matches actual behavior:
data:URLs are allowed (code unchanged). - Fix: the
??operator in expressions treats an empty string (unfilled field) as "no value", so the right-hand side applies;0andfalseremain valid values. - Fix: validation messages for max length, required attachments, repeating table (row count, required cells), field render errors, and Attachments widget texts are translated into the form language (cs, en, de, sk).
- Fix: a comment or version without a known author displays a translated "User" instead of a hardcoded Czech string from the service.
- Fix: Choice and MultiChoice field options sync with the SharePoint column on form load: new options are appended, removed ones disappear from the dropdown, and the order of kept options is preserved. A removed option stored on an item still displays and is not lost on save.
- Fix: repeating table validation runs even on an optional table (previously
minRows,maxRows, and required columns were not checked on it) and never falls through the generic field branch. An empty optional table is always valid; once it has a row,maxRows, required columns, andminRows("no rows, or at leastminRows") apply. A required table behaves unchanged. - Fix: post-save redirect (
afterSaveConfig.redirectUrl) encodes field values in query and fragment (encodeURIComponent) and validates the resulting URL: onlyhttp,https, and relative paths are allowed. Unsafe URLs (such asjavascript:) are ignored, a console warning is logged, and default post-save behavior applies. - Fix: activating the form on content types no longer overwrites third-party customizers. Only the forms being enabled are set, and deactivation removes only our component's binding. If changing one content type fails, already changed types are rolled back, or the error lists the types that remained modified.
- Fix: cleaning up nested unique permissions during storage lock XML-escapes the path in the CAML query and explicitly requests
FileRef;FileRefandHasUniqueRoleAssignmentsare read per item individually (RESTGetItemsdoes not return them even viaViewFields; the first fix version therefore reported "Configuration storage is not locked" on SharePoint). If a field is missing from the response, locking fails withlockFailedinstead of silently leaving nested items writable. - Fix: ETag refresh failure after modifying attachments (or after taxonomy fallback) no longer masks the original save error. The ETag is marked stale and re-fetched before the next save, so a retry does not report a false conflict (HTTP 412).
- Fix: expressions no longer coerce strings with leading zeros, exponents, or hex notation to numbers (ZIP
01234, phone0601…,1e5); only standard decimal notation is coerced to a number, and arithmetic operators parse text themselves.CONCAT([PSC], " Praha")therefore returns01234 Praha. - Fix: changes from
onSaverules (setValue,setExpression) are rolled back to their original values if saving is blocked byonBeforeSaveor submission fails; the form is then not falsely dirty.onBeforeSavestill sees the new values viactx.getValue. - Fix: cascading lookup search accepts a numeric parent field value passed as a string (
"12") and filters byId(the regex was testing the letter "d" instead of a digit). - Fix: the
??operator treats whitespace-only text as "no value", just likeISBLANKandCOALESCE;0andfalseremain valid values. - Fix: Version History displays boolean values translated into the form language (Yes/No, Ja/Nein, Áno/Nie) instead of hardcoded Czech Ano/Ne, and displays the form field label (or list column title) instead of internal names. The service returns neutral markers; the widget handles translation.
- Fix: saving configuration by an owner on locked storage no longer re-applies permissions unless its inputs changed (designer group, organization and guest read access, owner). An input fingerprint is stored in
<listId>.perm.jsonin the storage root; on change, read error, or missing fingerprint, permissions reconcile as before. Reconciliation failure after writing the configuration is a warning, not a save error. - Documentation: Version History explicitly documents adding comments in Display mode as intentional behavior matching native SharePoint.
- Documentation: English guide for AI agents (
docs/DEVELOPER_GUIDE.md,llms.txt) and a rule inCLAUDE.mdto keep it updated alongside developer documentation.
Previously Delivered Features
- Process stepper, columns in sections, custom button editor, modal field settings.
- Related Items and Related Documents widgets (columns, sorting, filtering, navigation to DisplayForm).
- Custom scripts,
setExpressionaction, custom buttons, repeating table. - Collapsible sections,
defaultCollapsed, andsetCollapsedaction. - Virtual widgets (banner, memory wrapper), rules for tabs, sections, form mode, and
@Mewith inheritance. - Top command bar with display/edit toggle, width settings, and single-click date picker.
How to Write Entries
Every code change adds an entry to the current version section (at the top). An entry has the form category – brief description – link to affected documentation page, for example:
<li><strong>Rules</strong> – new setColor action (<a href="user/rules.html#action-setColor">Rules</a>).</li>
Categories: Form, Designer, Rules, Widgets, Security, Administration, Development. When releasing a new package version, add a version heading above the list and update the version in docs/assets/manifest.js.