# Changelog

## Product v1.0.0 build 20260610.002

- Added `docs/HOST_SIDE_INTEGRATION_SPEC.md` for Host-side implementation requirements, lifecycle, Control API usage, storage setup, Google Drive frontend-only setup, Backend API context, Host events, extension registries, security expectations, and acceptance checklist.
- Product version and API version remain `1.0.0` / `1.0`; buildVersion updated to `20260610.002`.


## Product v1.0.0

- Initial public product release of UnifiedFiler.
- Product version is separated from development milestones.
- Product v1.0.0 is based on internal development milestone `dev-2.1.0`.
- Public API contract version is `1.0`.
- Backend API contract version remains `1.0`.
- Runtime now exposes `productVersion`, `developmentVersion`, `developmentMilestone`, `apiVersion`, `contractVersion`, and `buildVersion`.
- Added `VERSION.json`, `docs/VERSIONING_POLICY.md`, `docs/PRODUCT_RELEASE_1_0_0.md`, and `docs/DEVELOPMENT_HISTORY.md`.

## Development milestone dev-2.1.0

- Added Metadata editing UI, Permission / Capability UI, HostApplicationBridgeService, GoogleDriveWorkflowService, and backend samples.
- Consolidated the v2.0.1 / v2.0.2 / v2.1 roadmap into the final development milestone used for Product v1.0.0.

## v1.9.9-fix3

- Added `PreviewProviderRegistry` for Host-defined preview renderers.
- Added Preview Provider registration APIs on `PreviewService`, `FileExplorerControl`, `FilePickerControl`, and `UnifiedFilerControl`.
- Host preview providers are evaluated before built-in previews and before package preview in FileExplorer.
- Added a `.hcard` Host preview provider example to the Control Architecture demo.
- Updated `scripts/main.js` version to `1.9.9-fix3`.

## v1.9.9-fix2

- Added `CreateTypeRegistry` as the Host-facing registry for New/Create item types.
- Added FileExplorerControl APIs: `registerCreateType`, `registerCreateTypes`, `unregisterCreateType`, `getCreateType`, `getCreateTypes`, and `createItem`.
- Added the `createItem` command so Host API, New menu, and CommandRegistry follow the same creation path.
- Kept `newMenuItems` compatibility while moving the preferred extension model to Control-owned create types.
- Updated the Control demo with Host-defined create types.

## v1.9.9-fix1

- FileExplorer の Breadcrumb / path display から、既定で Storage / Driver 名を表示しないようにしました。
- Storage 名は Storage Selector が担当し、Breadcrumb は `/drafts` のように現在フォルダ階層だけを表示します。
- 互換用に `showStorageInBreadcrumb: true` を追加しました。

## v1.9.9

- Added BackendApiContractService with stable Backend API contract v1.0.
- Extended BackendApiAdapter with configurable endpoint mapping, metadata, thumbnail, enriched Host context and getBackendSpec().
- Added SecurityPolicyService and integrated it into FileService.
- Extended ApiClientService context headers for workspace and owner object links.
- Extended MemoryApiBackendService with metadata/updateMetadata/thumbnail support.
- Added Backend API, Security Policy and Regression Test docs.

## v1.9.8-fix2

- Added independent scroll containers for the FilePicker / FileSaver folder tree, file list, and preview pane.
- Prevented the outer jQuery UI dialog content from becoming the main scroll area.
- Fixed FilePicker preview so clicking entries updates the preview pane even when the entry is not selectable, such as folders in a file-only picker.
- Added a lightweight preview summary for folder entries.

## v1.9.8-fix1

- Changed FilePicker / FileSaver This Device behavior to match FileExplorer: mount a local folder first, then list/select/save inside that mounted folder.
- Added local-folder mount action to FilePickerDialog and FileSaverDialog.
- Added FilePickerControl.mountStorage() and FileSaverControl.mountStorage().
- Made one-off local open/save picker fallback opt-in (`localFileFallback` / `localSaveFallback`) rather than the default.
- Fixed File System Access API accept metadata so MIME patterns such as `text/*` are never passed as extension strings.

## v1.9.8

- Added HostProfilePresetService and built-in Host profiles.
- Stabilized FilePickerControl.open() / FileSaverControl.open() / FileSaverControl.save() APIs.
- Added optional FilePicker preview pane with Blob URL lifecycle management.
- Added FilePicker Recent / Favorite integration.
- Added Save As / Export / Package Save workflow metadata to FileSaver requests.
- Updated FilePicker / FileSaver demos and documentation.


## v1.9.8

- Fixed shared Upload button behavior where the file picker opened but selected files were not uploaded.
- Snapshotted the browser FileList before clearing the hidden file input so AppStorage and Google Drive both receive the selected files reliably.
- Added a pending upload target so async file selection uploads to the intended adapter/path without mutating the current view state.

## v1.9.7-fix3

- Removed the optional demo-side `server.js` to avoid any misunderstanding that Google Drive upload depends on server-side code.
- Reaffirmed the Google Drive integration as browser-only: Google Identity Services token flow plus Google Drive API v3 calls through `fetch`.
- Kept the v1.9.7-fix2 single-flight authorization improvement so parallel Drive API startup requests do not open duplicate token popups.
- Updated Google Drive browser documentation to describe frontend-only operation and to keep COOP information as Host environment guidance only.

## v1.9.7-fix2

- Added single-flight Google Identity Services token authorization to avoid duplicate popup flows during parallel Drive API startup requests.
- Changed default GIS token prompt for normal API requests from forced consent to an empty prompt; the demo Connect button still requests `prompt: 'consent'` explicitly.
- Documented the browser `Cross-Origin-Opener-Policy policy would block the window.closed call` warning as Host/browser environment guidance only.


## v1.9.7-fix1

- Fixed Google Drive rename 403 handling.
- Merged adapter-level and entry-level capabilities for command enablement.
- Disabled inline rename/delete when Google Drive per-file capabilities forbid the operation.
- Improved Google Drive API error messages with status/reason/scope guidance.
- Updated Google Drive demo scope default to `https://www.googleapis.com/auth/drive` for full file-manager operations.


## v1.9.7

- Strengthened Google Drive UI integration.
- Added Shared Drives and Shared with me virtual navigation nodes.
- Added Google Workspace export command and dialog.
- Added Open in Google Drive command for Drive web links.
- Added Google Drive upload conflict dialog support.
- Added operation progress panel for upload/export workflows.
- Forwarded conflictMode/uploadStrategy/resolveConflict through FileService uploadFiles().


## v1.9.6

- Split the internal FileExplorer View/Controller into smaller View components:
  - `FileToolbarView`
  - `FileTreeView`
  - `FileItemsView`
  - `FilePreviewPaneView`
  - `FileMetadataPaneView`
  - `FileContextMenuView`
- Kept `FileExplorerView` as the composition root that owns the internal jQuery View parts.
- Added `controlStateStore` / `controlEventBus` handoff from `FileExplorerControl` to internal Views.
- Added `_publishState()` so internal Views can publish UI snapshots into the shared `StateStore`.
- Kept the public jQuery plugin API compatible: `$.fn.fileExplorer`, `$.fn.filePickerDialog`, and `$.fn.fileSaverDialog`.
- Exported the new View classes through `UnifiedFiler.views`.


## v1.9.5

- Strengthened Control / Command architecture.
- Unified Toolbar, ContextMenu, KeyboardShortcut, and Host `exec()` behavior through `CommandRegistry` where `FileExplorerControl` is used.
- Expanded command metadata and state model with surface, shortcut, checked, group, and order information.
- Added command-state map and shortcut resolution APIs.
- Added context-menu generation from registered commands.
- Added `commandStateChanged` event.
- Updated i18n labels and command-driven UI state styling.

## v1.9.4-fix3 - FileExplorer Splitter Direction Fix

- Replaced jQuery UI resizable usage for the FileExplorer tree and preview panes with a small custom splitter controller.
- Fixed preview-pane splitter dragging so moving the splitter left makes the preview wider and moving it right makes the preview narrower, matching the visual cursor direction.
- Kept the left tree splitter behavior consistent: moving right widens the tree and moving left narrows it.
- Added `treePaneMinWidth`, `treePaneMaxWidth`, `previewPaneMinWidth`, and `previewPaneMaxWidth` options.
- Added resize-state CSS to suppress text/image/iframe interaction while dragging.

## v1.9.4-fix2 - View Module Naming Alignment

- Renamed the internal UI component directory from `scripts/plugins/` to `scripts/views/`.
- Renamed implementation-named view files to `FileExplorerView.js`, `FilePickerDialogView.js`, and `FileSaverDialogView.js`.
- Renamed the exported module group from `UnifiedFiler.plugins` to `UnifiedFiler.views`.
- Kept the existing jQuery plugin APIs `$.fn.fileExplorer`, `$.fn.filePickerDialog`, and `$.fn.fileSaverDialog` registered by the View modules for runtime compatibility.
- Updated Demo and Control module AMD dependencies to use the new `views` paths.

## v1.9.4-fix1 - Picker/Saver Main Area Layout

- Enlarged FilePickerDialog and FileSaverDialog default dialog dimensions.
- Added `maximizeMainArea`, `compactToolbar`, `compactFooter`, `folderTreeWidth`, `folderTreeMinWidth`, `contentAreaMinHeight`, `fitToViewport`, and `viewportMargin` options.
- Changed the optional folder-tree picker/saver layout so the central tree/list browser area receives the largest available height.
- Reduced toolbar, hint, footer, tree-row and list-row spacing for dialog use without changing the full FileExplorer layout.
- Updated picker, saver and Control architecture demos to show the main-area-first dialog parameters.

# v1.9.4 - Control Architecture Foundation

- Added Host-facing Control classes: `FileExplorerControl`, `FilePickerControl`, `FileSaverControl`, and `UnifiedFilerControl`.
- Added `CommandRegistry`, `BaseCommand`, and default FileExplorer command registrations.
- Added `EventBus`, `StateStore`, `SelectionModel`, and `ClipboardModel` as the first Control-side model layer.
- Kept jQuery-plugin-based View modules as internal View/Controller components owned by Controls.
- Added public `FileExplorer.executeAction()`, `getCapabilities()`, and `getCommandState()` bridges for Control integration.
- Extended the base capability model with upload/export/share/preview flags.
- Exported Controls, Commands, and Models from `scripts/main.js`.

# v1.9.3-fix2

- Improved FileExplorer inline rename to match Windows Explorer behavior more closely.
- Changed the default mouse trigger to `selectedNameClick`: first click selects, second click on the selected name starts rename.
- Added Windows-like selection behavior for file names so the base name is selected while the extension stays visible.
- Added dynamic inline rename textbox sizing for DetailView, ListView and IconView instead of relying on the old narrow fixed input.
- Polished inline rename CSS so the textbox is visible, aligned, and does not collapse to an ellipsis-like tiny area.

# v1.9.3-fix1

- Fixed the demo bootstrap initialization path so FileExplorer / FilePicker / FileSaver demos no longer assume every adapter exposes a concrete `init()` method.
- Added a default no-op `BaseStorageAdapter.init()` for Host-provided adapters that are already initialized or do not require startup work.
- Kept v1.9.3 FilePicker / FileSaver folder tree options unchanged.


## v1.9.7

- Strengthened Google Drive UI integration.
- Added Shared Drives and Shared with me virtual navigation nodes.
- Added Google Workspace export command and dialog.
- Added Open in Google Drive command for Drive web links.
- Added Google Drive upload conflict dialog support.
- Added operation progress panel for upload/export workflows.
- Forwarded conflictMode/uploadStrategy/resolveConflict through FileService uploadFiles().


## v1.9.3 - Dialog Folder Tree Option

- Added optional folder tree panes to `FilePickerDialog` and `FileSaverDialog`.
- Added dialog options `showTree`, `showFolderTree`, `treeStorageMode`, and `expandTreeRoot`.
- Added tree branch expand/collapse behavior inside dialogs without forcing the main file list to reload unnecessarily.
- Added active tree-node synchronization when the dialog path changes by breadcrumb/up button, double-click, or tree click.
- Updated FilePicker and FileSaver demos to expose Show Folder Tree and Tree Storage Mode parameters.

## v1.9.2 - Incremental Tree and Preview Safety

- Changed tree expand/collapse to update only the clicked branch instead of rebuilding the whole tree.
- Changed folder create/rename/delete and copy/move/drop flows to refresh affected branches where possible.
- Added preview object URL lifecycle management so Image/PDF/HTML Blob URLs are revoked on selection change, preview refresh, or component destroy.
- Added `PreviewService.renderWithResources()` while keeping `PreviewService.render()` backward compatible.
- Added `enableLargePreviewGuard` and strengthened large file preview checks.
- Added pre-read `PackageInfoService` size guard for ZIP/native package inspection.
- Added `packagePreviewTooLarge` i18n text in English, Japanese, and Chinese.

## v1.9.1 - Stable Cloud Tree Navigation

- Changed normal FileExplorer navigation so it no longer rebuilds the entire left tree by default.
- Added `refreshTreeOnNavigation` option. The default is `false` so Google Drive and other cloud trees keep their expanded state and scroll position while browsing folders.
- Added internal tree-node activation helpers to update the selected tree node without re-querying every expanded Google Drive branch.
- Kept full tree rebuild for explicit Refresh, structural operations, or active-storage tree mode when the required root is not present.

## v1.9.0

- Added enhanced PreviewService support for Markdown, formatted JSON, PDF iframe preview, image preview and sandboxed HTML preview.
- Kept ZIP/native package preview through PackageInfoService and updated docs around package preview.
- Added Google Drive conflict handling with conflictMode: rename / overwrite / skip / error.
- Added Google Drive uploadStrategy: multipart / resumable / auto, plus resumableThreshold.
- Added Google Drive exportFile(), listSharedDrives(), listSharedWithMe() and listSharedDriveRoot().
- Added ConflictResolverService for reusable save/copy/move conflict policies.
- Added HostIntegrationService for UnifiedDesktop / Office / Viewer / Editor integration profiles.
- Added FileService batch APIs: copyEntries(), moveEntries(), removeEntries(), exportFile().
- Updated scripts/main.js exports to include the new services.


## v1.8.5

- Fixed Font Awesome folder icons rendering as black in ListView / DetailView / IconView.
- Improved inline rename activation from file/folder name click.
- Added `inlineRenameTrigger` option: `nameClick`, `selectedNameClick`, or `manual`.
- Polished inline rename input style for Windows 11 themed layouts.


## v1.9.7

- Strengthened Google Drive UI integration.
- Added Shared Drives and Shared with me virtual navigation nodes.
- Added Google Workspace export command and dialog.
- Added Open in Google Drive command for Drive web links.
- Added Google Drive upload conflict dialog support.
- Added operation progress panel for upload/export workflows.
- Forwarded conflictMode/uploadStrategy/resolveConflict through FileService uploadFiles().


## v1.9.3 - Dialog Folder Tree Option

- Added optional folder tree panes to `FilePickerDialog` and `FileSaverDialog`.
- Added dialog options `showTree`, `showFolderTree`, `treeStorageMode`, and `expandTreeRoot`.
- Added tree branch expand/collapse behavior inside dialogs without forcing the main file list to reload unnecessarily.
- Added active tree-node synchronization when the dialog path changes by breadcrumb/up button, double-click, or tree click.
- Updated FilePicker and FileSaver demos to expose Show Folder Tree and Tree Storage Mode parameters.

## v1.8.3

- Added inline rename for files/folders from ListView/DetailView name click.
- Added `startInlineRename()` Host API and inline rename options.
- Added demo controls for inline rename parameters.
- Improved Google Drive rename context handling.

## v1.8.2

- Added Windows 11 inspired flat theme.
- Added configurable toolbar New menu and file-template creation.
- Added showStorageSelector and treeStorageMode options.
- Added detailColumns and improved adjacent-column splitter resizing.
- Improved ListView / DetailView folder double-click navigation.


## v1.8.1

- Fixed folder navigation from ListView/detail rows by avoiding full DOM rebuild during the first click selection, so double-click can open folders reliably.
- Reworked detail-view column resizing with `colgroup` and stored column widths so dragging a splitter changes only the intended column instead of expanding neighboring columns.
- Added Font Awesome-aware toolbar and context-menu icons with text fallbacks when Font Awesome is not loaded by the Host.
- Updated demo pages to load Font Awesome and show the improved command icons.

## v1.8

- Replaced the memory/mock-style Google Drive demo backend with real browser-only Google Drive integration.
- Added `GoogleIdentityAuthService` for Google Identity Services OAuth token flow.
- Added `GoogleDriveApiService` for direct Drive API v3 calls through Fetch API and OAuth bearer tokens.
- Added `GoogleDrivePickerService` for real Google Picker file selection.
- Added `GoogleDriveMimeMap` for Google Workspace MIME conversion and UnifiedFiler entry mapping.
- Removed `MemoryGoogleDriveService` from the product package body.
- Added `demo/google-drive.html` for API key, OAuth Client ID, App ID and scope parameter testing.
- Updated `GoogleDriveAdapter` to accept client-side parameters directly: `clientId`, `apiKey`, `appId`, `scopes`, `enablePicker`, `supportsAllDrives`, `includeItemsFromAllDrives`.

## v1.7

- Added `GoogleDriveAdapter` as a StorageAdapter-compatible cloud adapter.
- Added `MemoryGoogleDriveService` so demos and automated checks can exercise Google Drive-style behavior without real OAuth credentials.
- Added `GoogleDrivePickerBridgeService` as an optional Host-side helper for Google Picker integration.
- Updated FileExplorer, FilePicker, FileSaver, and embedded demos to expose `googleDrive` as a configurable storage option.
- Updated package entry exports in `scripts/main.js` for the new Google Drive adapter and bridge services.
- Documented the boundary that UnifiedFiler does not own Google OAuth credentials; the Host supplies authentication and bridge implementation.

## v1.6

- Added `PackageInfoService` for JSZip-based ZIP/native package inspection.
- Added package type detection for `.zip`, `.uwpsx`, `.usldx`, `.umal`, `.umdlx`, and `.ualbx`.
- Added FileExplorer package preview rendering before generic file preview.
- Added context-menu `Package Info` modal dialog and public `getPackageInfo()` / `showPackageInfo()` methods.
- Added real ZIP-based sample native files to the App Storage demo seed.
- Updated demo options for enabling package preview and limiting displayed package entries.

## v1.5

- Added `BackendApiAdapter` for PHP/Node/API-backed storage integration.
- Added `ApiClientService` for base URL, headers, credentials, timeout, and tenant/app/user context handling.
- Added `MemoryApiBackendService` as a local API-compatible backend for demos and automated smoke tests.
- Updated FileExplorer, FilePicker, FileSaver demos to expose `backendApi` as a configurable storage option.
- Updated package entry exports in `scripts/main.js` for the new API adapter and services.

## v1.4

- Enhanced `LocalDiskAdapter` with browser File System Access API support for mounting a user-selected local folder.
- Added mounted local-folder listing, file read/write, folder creation, delete, and scoped search where the browser supports the API.
- Added native open/save picker support with download/file-input fallback behavior.
- Added chunked Blob writing and progress callbacks for larger file operations.
- Added `OperationProgressService` as a reusable progress hub for uploads, saves, and future backend transfer adapters.
- Updated `FileService` with `mountStorage`, `openLocalFiles`, `saveLocalFile`, and progress-aware `uploadFiles`.
- Added FileExplorer local-folder mount command, mount hint view, context-menu entry, and progress status bar.
- Updated demos and documents for v1.4 package integration.

## v1.3

- Added service-managed Favorites through `FavoriteFileService` and FileExplorer toolbar/context-menu integration.
- Added sidecar metadata editing through `MetadataService`, including description, tags, cached thumbnails, and sidecar synchronization after rename, copy, move, and delete operations.
- Added reusable `PreviewService` so preview rendering and thumbnail generation can be shared by Host systems or other UnifiedFiler components.
- Added Recent Files and Favorites quick lists in the FileExplorer tree pane.
- Added metadata tag badges in detail/list/icon views and thumbnail display in icon view.
- Updated Demo parameter controls for thumbnail options and updated integration/API documentation for the new services.

## v1.2

- Enhanced FilePickerDialog as a product-level component: file/folder/both selection modes, multiple selection, extension and MIME filters, disabled filtered rows, current-folder selection, LocalDisk file input support, standardized result payloads, callbacks, and jQuery events.
- Enhanced FileSaverDialog as a product-level component: data provider based actual save, request-only fallback for Host-managed save, overwrite modes (`confirm` / `rename` / `overwrite` / `error`), browser download save for LocalDisk, folder navigation, new-folder support, normalized save results, callbacks, and jQuery events.
- Updated LocalDiskAdapter capabilities with file pick/download save metadata.
- Updated FilePicker and FileSaver demos so launch parameters can be changed from the screen.
- Updated API documentation for FilePickerDialog and FileSaverDialog integration.

## v1.1.5

- Added Host-friendly FileExplorer public methods: `getState`, `getSelectedEntry`, `openPath`, `setStorage`, `setViewMode`, and `setReadOnly`.
- Added component event/callback bridge: jQuery events `fileexplorer:*`, option-specific callbacks such as `onSelected`, and common `onEvent(name, payload)`.
- Added toolbar and context-menu operations for creating empty files and importing browser `File` objects into writable adapters.
- Added native file upload through button selection and drag-and-drop into the file area.
- Added read-only mode, upload enable/disable, multiple-upload switch, extension/MIME filtering, and preview size limit options.
- Added dynamic command enable/disable based on storage adapter capabilities and component state.
- Added keyboard shortcuts for rename, delete, open, copy, cut, paste, and search focus.
- Enhanced `demo/explorer.html` so launch parameters can be changed from the screen, including read-only, upload, tree display, extension filter, and preview limit.
- Added a demo event log to show Host-side integration callbacks.
- Updated API and integration documents for product-level embedding.

## v1.1.4

- Removed the extra nested `UnifiedFiler/` folder. The extracted root folder is now the UnifiedFiler package root.
- Renamed product logic folder from `js/` to `scripts/`.
- Renamed product CSS folder from `css/` to `themes/default/`.
- Renamed the product CSS file from `file-explorer.css` to `unified-filer.css`.
- Renamed the AMD package entry module from `file-explorer.js` to `main.js`.
- Updated Demo folders from `demo/js/` and `demo/css/` to `demo/scripts/` and `demo/themes/`.
- Updated Demo RequireJS settings to mount the package with the `UnifiedFiler` alias.
- Kept package-internal AMD dependencies as relative paths.
- Updated documentation and README files for the new package layout.

## v1.1.3

- Renamed the package from FileExplorer to UnifiedFiler.
- Removed the leading `I` prefix from public class names: `FileExplorer`, `FilePickerDialog`, and `FileSaverDialog`.
- Removed `itoolkits` from public JavaScript file names.
- Renamed jQuery Plugin entry points to `fileExplorer`, `filePickerDialog`, and `fileSaverDialog`.
- Added method-level comments across component, service, adapter, and demo code.
- Enhanced demo pages so representative launch parameters can be edited before starting each component.

## v1.1.2

- Reorganized product body into one AMD package folder containing adapters, views, services, utilities, i18n, and vendor wrappers.
- Converted package-internal AMD dependencies to relative paths.
- Added an aggregate namespace module for the package.

## v1.1.1

- Split demo pages into multiple embedding examples.
- Separated demo-only CSS from product CSS.

## v1.1

- Added tree hierarchy, context menus, sorting, copy/cut/paste, and Drag & Drop behavior.

## v1.8.4 - Explorer Interaction Enhancement

- Added multiple selection for FileExplorer entries.
- Added Ctrl/Cmd click, Shift range selection, and Ctrl/Cmd + A.
- Added keyboard navigation and shortcuts for open, rename, delete, copy, cut, paste, search focus, and selection clearing.
- Added batch copy/move/delete handling for selected entries.
- Added drag helper count badge for multi-selection D&D.
- Added demo options for `enableMultipleSelection` and `enableKeyboardShortcuts`.
## v2.1.0

- First stable Host-facing API release.
- Added `PublicApiContractService`.
- Added `RegressionTestService` and `demo/regression-tests.html`.
- Added top-level helper functions on `UnifiedFiler/main`.
- Added `UnifiedFilerControl.registerCreateType()` / `registerCreateTypes()` / `unregisterCreateType()` for shared Host create types.
- Documented stable Control, Command, CreateType, PreviewProvider, StorageAdapter, Backend API, and SecurityPolicy contracts.
- Added `docs/PUBLIC_API_CONTRACT.md`, `docs/V2_0_MIGRATION.md`, and `docs/VERSION_2_0_NOTES.md`.


## v2.1.0 additions

- Extended metadata editing UI.
- PermissionPolicyService and capability badges.
- FileSaver workflow/export-format UI.
- HostApplicationBridgeService for UnifiedDesktop / Viewer / Editor / Owners Reform / Sappane Tools.
- GoogleDriveWorkflowService descriptors.
- PHP / Node.js backend API samples.
