Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
c01450b
Fix preview pane height issue in Form Builder
dwertheimer Jan 13, 2026
a108a5f
Fix updateReceivingTemplateWithFields to exclude display-only fields
dwertheimer Jan 13, 2026
d59f338
Add Comment field type for Form Builder
dwertheimer Jan 13, 2026
1a262f2
Fix Enter key submitting forms in textareas
dwertheimer Jan 13, 2026
850d7d9
Fix Open button for processing template - load notes if needed
dwertheimer Jan 13, 2026
08e4050
Forms: TemplateJS improvements and logging cleanup
dwertheimer Jan 13, 2026
9dbda04
Add getRenderContext command and integrate with Forms plugin
dwertheimer Jan 13, 2026
ba89cdc
Expand getFilteredTemplateList to search @Forms and use localized fol…
dwertheimer Jan 13, 2026
bd6dbd6
Update changelog for template folder expansion changes
dwertheimer Jan 13, 2026
643a499
Update template search functions to search in both @Templates and @Forms
dwertheimer Jan 13, 2026
e55ba8f
Update changelog for template search function updates
dwertheimer Jan 13, 2026
1d00197
Create shared utility function for template folder prefixes including…
dwertheimer Jan 13, 2026
cca2321
Update changelog for shared utility function refactoring
dwertheimer Jan 13, 2026
e6c4ce2
Update all template search functions to use shared utility and search…
dwertheimer Jan 13, 2026
d27b5c6
Update changelog for comprehensive template search updates
dwertheimer Jan 13, 2026
899424e
Enhance changelog entry for comprehensive template search refactoring
dwertheimer Jan 13, 2026
ff77cfb
Update chooseTemplate to use chooseNoteV2 and handle @Forms/teamspaces
dwertheimer Jan 14, 2026
4dbb18f
Fix tests for chooseNoteV2 migration and DataStore.preference
dwertheimer Jan 14, 2026
bb5d317
Replace chooseOption with chooseNoteV2 in getTemplateContent
dwertheimer Jan 14, 2026
d4ab2be
Enhance changelog entry for chooseNoteV2 migration
dwertheimer Jan 14, 2026
58bee72
Fix for template code with returns (prev assumed always strings)
dwertheimer Jan 14, 2026
b69f0c3
Fix Custom Width input validation preventing typing in FieldEditor
dwertheimer Jan 14, 2026
26184f3
Fix template form label alignment and add customizable compact mode s…
dwertheimer Jan 14, 2026
9ded3d6
Attempt to fix spacing between searchable choosers (issue not resolved)
dwertheimer Jan 14, 2026
ec2b4d1
Fix Enter key submitting form in ContainedMultiSelectChooser search i…
dwertheimer Jan 14, 2026
31a3af7
Fix newly created items not appearing in ContainedMultiSelectChooser
dwertheimer Jan 14, 2026
eb7c669
Update ContainedMultiSelectChooser: shorten button labels and add is:…
dwertheimer Jan 14, 2026
45b1975
Improve form UX: focus, tabbing, chooser controls, and template-form CSS
dwertheimer Jan 14, 2026
e893a0b
Fix SearchableChooser portal position on layout shifts
dwertheimer Jan 14, 2026
331233a
Fix SearchableChooser click selection after refocus
dwertheimer Jan 14, 2026
d8d5cbf
Fix Tab navigation when SearchableChooser dropdown is open
dwertheimer Jan 14, 2026
88c4d66
Bump version to 1.0.9 and update changelog
dwertheimer Jan 14, 2026
83fb2d1
chore(dwertheimer.Forms): bump version to 1.1.0 and add color system …
dwertheimer Jan 14, 2026
011a1a5
fix(SearchableChooser): hide short description when identical to label
dwertheimer Jan 14, 2026
7f48cee
Delete helpers changelog
dwertheimer Jan 14, 2026
78b1485
fix(FormBuilder): ensure default comment field appears for new forms
dwertheimer Jan 14, 2026
3d9d0d3
fix(FormBuilder): pass isNewForm flag from openFormBuilder to openFor…
dwertheimer Jan 14, 2026
8b5ff6c
fix(NoteChooser): display ISO date format when calendar picker select…
dwertheimer Jan 14, 2026
46cd7cb
docs(changelog): add NoteChooser ISO date format fix to v1.0.10 chang…
dwertheimer Jan 14, 2026
fbbae2c
Forms 1.0.11: Multi-select NoteChooser, calendar picker control, and …
dwertheimer Jan 15, 2026
d7011a6
Add multi-select NoteChooser to README and update documentation guides
dwertheimer Jan 15, 2026
36750df
Update README with complete note-chooser multi-select documentation
dwertheimer Jan 15, 2026
70daf71
Fix: Extract newNoteTitle from template body frontmatter and show err…
dwertheimer Jan 15, 2026
8b94a89
Fix: Update parseFrontmatterFromString to handle -- (two dashes) fron…
dwertheimer Jan 15, 2026
7d7d253
Add date format setting for calendarpicker with moment.js formatting
dwertheimer Jan 15, 2026
15aaee2
Fix: Apply date formatting when typing directly in calendarpicker input
dwertheimer Jan 15, 2026
f671aba
Complete DD_NEW_FEATURE_CHECKLIST: Add dateFormat examples to Form Te…
dwertheimer Jan 15, 2026
80e578c
Update changelog: Add dateFormat feature for calendarpicker
dwertheimer Jan 15, 2026
0f9bede
Convert TemplateJS block errors from showMessage to React UI error di…
dwertheimer Jan 15, 2026
11c03ea
Fix: Convert remaining showMessage calls to React error display and f…
dwertheimer Jan 15, 2026
d75f48d
Fix: Wrap return values in Promise.resolve() for non-async function
dwertheimer Jan 15, 2026
8e55556
Reorder fields in Create New Note section: Move Folder field under Sp…
dwertheimer Jan 16, 2026
5441185
Add staticOptions support to FolderChooser for special TemplateRunner…
dwertheimer Jan 16, 2026
fd20416
Complete staticOptions feature per DD checklist
dwertheimer Jan 16, 2026
f6d7c65
Add staticOptions example to FormFieldRenderTest.js
dwertheimer Jan 16, 2026
428ad62
Fix infinite loop in GenericDatePicker when typing or tabbing
dwertheimer Jan 16, 2026
eb52c45
Fix Flow linter errors in GenericDatePicker value comparison
dwertheimer Jan 16, 2026
db92fa6
Fix remaining Flow linter error in handleInputBlur
dwertheimer Jan 16, 2026
52bb96a
Fix static options always visible in FolderChooser
dwertheimer Jan 16, 2026
ead1af0
Fix Space and Folder choosers width and folder icon
dwertheimer Jan 16, 2026
e183024
Fix folder chooser width and manual entry indicator
dwertheimer Jan 16, 2026
c5a4c7d
Fix static option icon in FolderChooser
dwertheimer Jan 16, 2026
e2cbef9
Update changelog for version 1.0.11 with recent fixes
dwertheimer Jan 16, 2026
30bab0d
Add all chooser types to Compact View Alignment Test section
dwertheimer Jan 16, 2026
d6d30cf
Fix chooser width to prevent wrapping in compact mode
dwertheimer Jan 16, 2026
262a4e0
Bump version to 1.0.12 and update changelog
dwertheimer Jan 16, 2026
4a862ad
Refactor getPluginData and add EventChooser preloading support
dwertheimer Jan 16, 2026
a5f4c1c
Fix EventChooser preloaded data and async loading positioning
dwertheimer Jan 16, 2026
a09b77c
Merge remote-tracking branch 'origin/main' into forms-1.0.11
dwertheimer Jan 16, 2026
ab127f4
Add missing tailwindToHsl function from main to keep helpers/colors.j…
dwertheimer Jan 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions dwertheimer.Forms/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,62 @@

See Plugin [README](https://github.com/NotePlan/plugins/blob/main/dwertheimer.Forms/README.md) for details on available commands and use case.

## [1.0.12] 2026-01-17 @dwertheimer

### Added
- **EventChooser Preloading**: Added support for preloading events data when `preloadChooserData: true` is set in form frontmatter
- **All Choosers Support Preloading**: All chooser types (FolderChooser, NoteChooser, SpaceChooser, MentionChooser, TagChooser, EventChooser) now support preloading data for static HTML testing

### Fixed
- Fixed chooser width wrapping in compact mode - removed `min-width` for percentage and viewport unit widths to prevent wrapping issues
- Choosers with `width="100%"` or other percentage/viewport units now properly respect container boundaries without wrapping

### Changed
- **SearchableChooser**: Width prop now only sets `min-width` for fixed pixel values, allowing flexible sizing for percentages and viewport units
- **Code Refactoring**: Refactored `getPluginData` function into smaller, modular helper functions for better maintainability:
- `detectFieldRequirements()` - Detects which chooser types are needed
- `ensureAutosaveField()` - Adds autosave field if needed
- `preloadAllChooserData()` - Orchestrates all preloading operations
- Individual preload functions for each chooser type (folders, notes, teamspaces, mentions, hashtags, events)
- `initializeEmptyChooserData()` - Initializes empty arrays when not preloading

## [1.0.11] 2026-01-17 @dwertheimer

### Added
- **Multi-select NoteChooser**: Added ability to select multiple notes in a note-chooser field with configurable output format (wikilink, pretty-link, raw-url) and separator (space, comma, newline)
- **Calendar Picker Button Control**: Added setting in FieldEditor to control visibility of calendar picker button in note-chooser fields
- **Form Tester Examples**: Added multi-select note chooser examples to Form Tester with different output formats and separators
- **Calendar Picker Date Format Setting**: Added configurable output format for calendarpicker fields using moment.js formatting:
- Default format is ISO 8601 (YYYY-MM-DD) instead of returning Date object
- Choose from 30+ date format options (US format, European format, long format, date & time, etc.)
- Use `[Object]` option to return Date object for backward compatibility
- Formatting applies when selecting from calendar picker or typing directly in the input field
- Supports locale-aware formatting using moment-with-locales based on NotePlan environment settings

### Fixed
- Fixed calendar picker button showing when "Include Calendar Notes" is disabled - now only shows when calendar notes are included (or explicitly enabled via setting)
- Fixed multi-select NoteChooser not rendering correctly - now properly detects `allowMultiSelect` prop and renders ContainedMultiSelectChooser instead of dropdown
- Fixed syntax error in NoteChooser.jsx that prevented Rollup from building (replaced Flow type guard with explicit array building)

### Changed
- **NoteChooser**: Calendar picker button now respects "Include Calendar Notes" setting by default - only appears when calendar notes are included
- **FieldEditor**: Added "Show Calendar Picker Button" checkbox in note-chooser field editor for explicit control
- **NoteChooser**: Multi-select mode uses ContainedMultiSelectChooser component with checkboxes for better UX
- **CalendarPicker**: Default behavior changed from returning Date object to returning ISO 8601 formatted string (YYYY-MM-DD) - use `dateFormat: '__object__'` to return Date object
- **CalendarPicker**: Dates typed directly in the input field are now parsed and formatted according to the selected dateFormat option
- **FolderChooser**: Static options (like `<select>`) now always appear at the top of the dropdown, regardless of search term
- **FormBuilder**: Space and Folder choosers in left sidebar now extend to 100% width for better layout
- **FolderChooser**: Fixed folder icon class to use complete Font Awesome class name (`fa-solid fa-folder`) for proper rendering
- **FolderChooser**: Static option icon now uses complete Font Awesome class name (`fa-solid fa-circle-question`) for proper rendering

### Fixed
- Fixed calendar picker button showing when "Include Calendar Notes" is disabled - now only shows when calendar notes are included (or explicitly enabled via setting)
- Fixed multi-select NoteChooser not rendering correctly - now properly detects `allowMultiSelect` prop and renders ContainedMultiSelectChooser instead of dropdown
- Fixed syntax error in NoteChooser.jsx that prevented Rollup from building (replaced Flow type guard with explicit array building)
- Fixed folder chooser width constraint in FormBuilder left sidebar - now respects `width="100%"` prop
- Fixed manual entry indicator showing incorrectly in DropdownSelectChooser (FrontmatterKeyChooser) - now only shows when value is actually a manual entry, not for empty values or during loading
- Fixed infinite loop in GenericDatePicker when typing or tabbing through input field - added value change detection to prevent unnecessary re-renders

## [1.0.10] 2026-01-14 @dwertheimer

### Added
Expand Down
73 changes: 67 additions & 6 deletions dwertheimer.Forms/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ The Form Builder includes these field types:
- **Date Picker** - Calendar for selecting dates

### NotePlan Selectors
- **Note Chooser** - Search and select a note
- **Note Chooser** - Search and select a note (supports single or multi-select with configurable output format)
- **Folder Chooser** - Search and select a folder
- **Space Chooser** - Select Private or a Teamspace
- **Heading Chooser** - Select a heading from a note
Expand Down Expand Up @@ -289,6 +289,32 @@ You can disable this globally and add autosave to specific forms only if preferr

**Most users won't need anything below this line.** The sections below are for advanced users who need custom processing logic or want to understand the underlying structure.

### Preloading Chooser Data for Static HTML Testing

When developing or testing forms, you may want to open the saved HTML file in Chrome without being connected to NotePlan. By default, chooser fields (folder-chooser, note-chooser, space-chooser, etc.) load their data dynamically from NotePlan, which requires an active connection.

**To enable preloaded data:**

Add this to your form's frontmatter:

```yaml
preloadChooserData: true
```

When `preloadChooserData: true` is set, the form will preload all chooser data when the HTML file is created:
- **Folders** - All folders for folder-chooser fields
- **Notes** - All notes for note-chooser fields
- **Teamspaces** - All teamspaces for space-chooser and folder-chooser decoration
- **Mentions** - All mentions for mention-chooser fields
- **Hashtags** - All hashtags for tag-chooser fields

The preloaded data is embedded in the saved HTML file (`form_output.html`), allowing you to:
- Test the form in Chrome without NotePlan
- Debug CSS and layout issues
- Share static HTML files for design review

**Note:** Preloaded data is a snapshot taken when the HTML is generated. For production use, leave `preloadChooserData` unset (or `false`) to use dynamic loading for up-to-date data.

### Custom Processing Templates

For advanced use cases that can't be handled by the Form Builder's built-in options, you can create custom processing templates.
Expand Down Expand Up @@ -488,7 +514,7 @@ All fields support these properties:

### Date Field Types

**`calendarpicker`** - Date picker
**`calendarpicker`** - Date picker with configurable output format
```javascript
{
key: 'dueDate',
Expand All @@ -497,20 +523,42 @@ All fields support these properties:
buttonText: 'Select Date',
visible: false, // true to show calendar by default
numberOfMonths: 1,
size: 0.75 // scale factor
size: 0.75, // scale factor
dateFormat: 'YYYY-MM-DD', // moment.js format string (default: 'YYYY-MM-DD' ISO 8601)
// Use '__object__' to return Date object instead of formatted string
// Examples:
// dateFormat: 'MM/DD/YYYY' - US format (12/25/2024)
// dateFormat: 'DD/MM/YYYY' - European format (25/12/2024)
// dateFormat: 'MMMM Do, YYYY' - Long format (December 25th, 2024)
// dateFormat: 'YYYY-MM-DD HH:mm' - ISO with time (2024-12-25 14:30)
// dateFormat: '__object__' - Returns Date object
}
```

### NotePlan Chooser Field Types

**`note-chooser`** - Searchable note selector
**`note-chooser`** - Searchable note selector (single or multi-select)
```javascript
{
key: 'targetNote',
label: 'Select Note',
type: 'note-chooser',
placeholder: 'Search notes...',
showValue: false // false=show title, true=show filename
showValue: false, // false=show title, true=show filename
// Multi-select options:
allowMultiSelect: true, // Enable multi-select mode (default: false)
noteOutputFormat: 'wikilink', // 'wikilink' | 'pretty-link' | 'raw-url' (default: 'wikilink')
noteSeparator: 'space', // 'space' | 'comma' | 'newline' (default: 'space')
// Filter options:
includePersonalNotes: true, // Include personal/project notes (default: true)
includeCalendarNotes: false, // Include calendar notes (default: false)
includeRelativeNotes: false, // Include relative notes like <today> (default: false)
includeTeamspaceNotes: true, // Include teamspace notes (default: true)
includeTemplatesAndForms: false, // Include @Templates and @Forms folders (default: false)
// Display options:
showCalendarChooserIcon: true, // Show calendar picker button (default: true if calendar notes included)
showTitleOnly: false, // Show only title, not path/title (default: false)
shortDescriptionOnLine2: false // Show description on second line (default: false)
}
```

Expand All @@ -520,10 +568,23 @@ All fields support these properties:
key: 'targetFolder',
label: 'Select Folder',
type: 'folder-chooser',
placeholder: 'Search folders...'
placeholder: 'Search folders...',
includeNewFolderOption: true, // Allow creating new folders
staticOptions: [ // Static options that appear at top of list
{ label: 'Select...', value: '<select>' } // TemplateRunner will prompt user each time
]
}
```

**Folder Chooser Options:**
- `includeArchive` (boolean) - Include Archive folder in list
- `includeNewFolderOption` (boolean) - Add "New Folder" option to create folders
- `startFolder` (string) - Limit folders to a specific subfolder (e.g., "/Projects")
- `includeFolderPath` (boolean) - Show full folder path, not just folder name (default: true)
- `excludeTeamspaces` (boolean) - Exclude teamspace folders from list
- `staticOptions` (array) - Static options to add at top of list. Each option is `{label: string, value: string}`. Useful for TemplateRunner special values like `<select>` which prompts the user each time.
- `sourceSpaceKey` (string) - Value dependency: key of a space-chooser field to filter folders by space

**`space-chooser`** - Space/Teamspace selector
```javascript
{
Expand Down
2 changes: 1 addition & 1 deletion dwertheimer.Forms/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"noteplan.minAppVersion": "3.4.0",
"plugin.id": "dwertheimer.Forms",
"plugin.name": "📝 Template Forms",
"plugin.version": "1.0.10",
"plugin.version": "1.0.12",
"plugin.releaseStatus": "beta",
"plugin.lastUpdateInfo": "Improved form UX: auto-focus, tab navigation, and chooser controls",
"plugin.description": "Dynamic Forms for NotePlan using Templating -- fill out a multi-field form and have the data sent to a template for processing",
Expand Down
Loading
Loading