pict-section-filebrowser 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/README.md +107 -0
  2. package/docs/.nojekyll +0 -0
  3. package/docs/README.md +110 -0
  4. package/docs/_sidebar.md +15 -0
  5. package/docs/_topbar.md +7 -0
  6. package/docs/cover.md +11 -0
  7. package/docs/css/docuserve.css +73 -0
  8. package/docs/index.html +39 -0
  9. package/docs/retold-catalog.json +100 -0
  10. package/docs/retold-keyword-index.json +19 -0
  11. package/package.json +58 -0
  12. package/source/Pict-Section-FileBrowser-DefaultConfiguration.js +400 -0
  13. package/source/Pict-Section-FileBrowser.js +27 -0
  14. package/source/bin/browse.js +166 -0
  15. package/source/providers/Pict-Provider-FileBrowserBrowse.js +211 -0
  16. package/source/providers/Pict-Provider-FileBrowserIcons.js +480 -0
  17. package/source/providers/Pict-Provider-FileBrowserLayout.js +254 -0
  18. package/source/providers/Pict-Provider-FileBrowserList.js +310 -0
  19. package/source/providers/Pict-Provider-FileBrowserView.js +176 -0
  20. package/source/services/Pict-Service-FileBrowser.js +597 -0
  21. package/source/views/Pict-View-FileBrowser-BrowseSearch.js +189 -0
  22. package/source/views/Pict-View-FileBrowser-BrowseTree.js +266 -0
  23. package/source/views/Pict-View-FileBrowser-ListDetail.js +299 -0
  24. package/source/views/Pict-View-FileBrowser-ListIcons.js +251 -0
  25. package/source/views/Pict-View-FileBrowser-ViewFileInfo.js +122 -0
  26. package/source/views/Pict-View-FileBrowser-ViewImage.js +114 -0
  27. package/source/views/Pict-View-FileBrowser.js +151 -0
  28. package/source/www/icon-styles.html +570 -0
  29. package/source/www/index.html +920 -0
  30. package/test/Pict-Section-FileBrowser_tests.js +1681 -0
package/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # Pict Section FileBrowser
2
+
3
+ A composable file browser section for the Pict application platform. Provides
4
+ modular browsing, listing, and viewing views for building customizable file
5
+ system navigation interfaces.
6
+
7
+ ## Features
8
+
9
+ - Composable views for tree browsing, search, detail lists, icon grids, file
10
+ info and image preview
11
+ - Multiple layout modes (tree-list, list-detail, browser-detail, browser-columns
12
+ and more)
13
+ - Five independent providers: Browse, List, View, Layout, Icons
14
+ - Hand-drawn SVG icon system with automatic file type detection
15
+ - Built-in REST API service for filesystem access
16
+ - CLI utility (`browse`) for instant file browser serving
17
+ - Lazy-loaded folder tree with caching
18
+ - Full-text file search
19
+ - Sortable columns, breadcrumb navigation, file metadata display
20
+
21
+ ## Installation
22
+
23
+ ```bash
24
+ npm install pict-section-filebrowser
25
+ ```
26
+
27
+ ## Quick Start
28
+
29
+ ```javascript
30
+ const libPictSectionFileBrowser = require('pict-section-filebrowser');
31
+
32
+ // Create a Pict application
33
+ const tmpPict = new libPict();
34
+
35
+ // Populate AppData with file entries
36
+ tmpPict.AppData.PictFileBrowser = {
37
+ FileList: [
38
+ { Name: 'Documents', Type: 'folder', Path: '/Documents' },
39
+ { Name: 'report.pdf', Type: 'file', Path: '/report.pdf', Size: 245000, Extension: '.pdf' }
40
+ ],
41
+ FolderTree: [
42
+ { Name: 'Documents', Path: '/Documents', Children: [] }
43
+ ]
44
+ };
45
+
46
+ // Register the file browser view
47
+ let tmpFileBrowser = tmpPict.addView(
48
+ 'Pict-FileBrowser',
49
+ libPictSectionFileBrowser.default_configuration,
50
+ libPictSectionFileBrowser
51
+ );
52
+ ```
53
+
54
+ ## CLI Usage
55
+
56
+ ```bash
57
+ browse [path] [options]
58
+ -p, --port <port> Port to listen on (default: 8086)
59
+ -a, --hidden Include hidden files (dotfiles)
60
+ -h, --help Show help message
61
+
62
+ Examples:
63
+ browse ~/Documents -p 9876
64
+ browse . --hidden
65
+ npx pict-section-filebrowser /var/log
66
+ ```
67
+
68
+ ## Architecture
69
+
70
+ The module is organized into five provider types and six view types:
71
+
72
+ **Providers:**
73
+ - **BrowseProvider** - Folder hierarchy, tree navigation, search
74
+ - **ListProvider** - File listing, sorting, filtering, selection
75
+ - **ViewProvider** - Selected file utilities, image detection
76
+ - **LayoutProvider** - View layout modes and pane visibility
77
+ - **IconProvider** - SVG icon generation and file type mapping
78
+
79
+ **Views:**
80
+ - **FileBrowser** - Container view orchestrating the ecosystem
81
+ - **BrowseTree** - Lazy-loaded hierarchical folder tree
82
+ - **BrowseSearch** - Full-text search with results
83
+ - **ListDetail** - Table-style listing with sortable columns
84
+ - **ListIcons** - Icon grid layout
85
+ - **ViewFileInfo** - File metadata display
86
+ - **ViewImage** - Image preview
87
+
88
+ **Service:**
89
+ - **FileBrowserService** - REST API endpoints for filesystem access
90
+
91
+ ## Testing
92
+
93
+ ```bash
94
+ npm test
95
+ ```
96
+
97
+ ## Related Packages
98
+
99
+ - [pict](https://github.com/stevenvelozo/pict) - Core application framework
100
+ - [pict-view](https://github.com/stevenvelozo/pict-view) - View base class
101
+ - [pict-provider](https://github.com/stevenvelozo/pict-provider) - Provider base class
102
+ - [orator](https://github.com/stevenvelozo/orator) - API server framework
103
+ - [fable](https://github.com/stevenvelozo/fable) - Service infrastructure
104
+
105
+ ## License
106
+
107
+ MIT
package/docs/.nojekyll ADDED
File without changes
package/docs/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # Pict-Section-FileBrowser
2
+
3
+ > A composable file browser section with modular browsing, listing, and viewing views for the Pict application platform
4
+
5
+ Pict-Section-FileBrowser provides a complete set of views and providers for building customizable file browsing interfaces. It supports multiple layout modes, a lazy-loaded folder tree, full-text search, sortable detail lists, icon grids, file metadata display, and image preview -- all wired together through the Pict AppData pattern.
6
+
7
+ ## Features
8
+
9
+ - **Composable Views** - Mix and match tree, list, search and detail views
10
+ - **Multiple Layouts** - Six built-in layout modes with custom layout support
11
+ - **Provider Architecture** - Five independent providers for browse, list, view, layout and icons
12
+ - **SVG Icon System** - Hand-drawn retro icons with automatic file type detection
13
+ - **REST API Service** - Built-in filesystem endpoints with path traversal protection
14
+ - **CLI Utility** - Instant file browser serving with `browse` command
15
+ - **Lazy Loading** - On-demand folder tree expansion with caching
16
+ - **Full-Text Search** - Case-insensitive file and folder search
17
+
18
+ ## Quick Start
19
+
20
+ ```javascript
21
+ const libPictSectionFileBrowser = require('pict-section-filebrowser');
22
+
23
+ // Create a Pict application
24
+ const tmpPict = new libPict();
25
+
26
+ // Populate AppData with file entries
27
+ tmpPict.AppData.PictFileBrowser = {
28
+ FileList: [
29
+ { Name: 'Documents', Type: 'folder', Path: '/Documents' },
30
+ { Name: 'report.pdf', Type: 'file', Path: '/report.pdf', Size: 245000, Extension: '.pdf' }
31
+ ],
32
+ FolderTree: [
33
+ { Name: 'Documents', Path: '/Documents', Children: [] }
34
+ ]
35
+ };
36
+
37
+ // Register the main file browser view
38
+ let tmpFileBrowser = tmpPict.addView(
39
+ 'Pict-FileBrowser',
40
+ libPictSectionFileBrowser.default_configuration,
41
+ libPictSectionFileBrowser
42
+ );
43
+
44
+ // Register specific sub-views as needed
45
+ tmpPict.addView('BrowseTree', {}, libPictSectionFileBrowser.PictViewBrowseTree);
46
+ tmpPict.addView('ListDetail', {}, libPictSectionFileBrowser.PictViewListDetail);
47
+ tmpPict.addView('FileInfo', {}, libPictSectionFileBrowser.PictViewFileInfo);
48
+ ```
49
+
50
+ ## Installation
51
+
52
+ ```bash
53
+ npm install pict-section-filebrowser
54
+ ```
55
+
56
+ ## CLI Usage
57
+
58
+ The module includes a `browse` command for serving a file browser instantly:
59
+
60
+ ```bash
61
+ browse [path] [options]
62
+ -p, --port <port> Port to listen on (default: 8086)
63
+ -a, --hidden Include hidden files (dotfiles)
64
+ -h, --help Show help message
65
+ ```
66
+
67
+ Examples:
68
+
69
+ ```bash
70
+ browse ~/Documents -p 9876
71
+ browse . --hidden
72
+ npx pict-section-filebrowser /var/log
73
+ ```
74
+
75
+ ## Module Exports
76
+
77
+ The main entry point exports the container view as the default, plus all sub-components:
78
+
79
+ | Export | Description |
80
+ |--------|-------------|
81
+ | `default` | PictViewFileBrowser container view |
82
+ | `PictFileBrowserBrowseProvider` | Folder hierarchy and search provider |
83
+ | `PictFileBrowserListProvider` | File listing, sorting and selection provider |
84
+ | `PictFileBrowserViewProvider` | File viewing utilities provider |
85
+ | `PictFileBrowserLayoutProvider` | Layout mode management provider |
86
+ | `PictFileBrowserIconProvider` | SVG icon generation provider |
87
+ | `PictViewBrowseTree` | Lazy-loaded folder tree view |
88
+ | `PictViewBrowseSearch` | Full-text search view |
89
+ | `PictViewListDetail` | Sortable table listing view |
90
+ | `PictViewListIcons` | Icon grid listing view |
91
+ | `PictViewFileInfo` | File metadata display view |
92
+ | `PictViewImageViewer` | Image preview view |
93
+ | `FileBrowserService` | REST API service for filesystem access |
94
+
95
+ ## Documentation
96
+
97
+ - [Providers](Providers.md) - Provider classes and their APIs
98
+ - [Views](Views.md) - View classes and rendering
99
+ - [Layouts](Layouts.md) - Built-in and custom layout modes
100
+ - [Icons](Icons.md) - SVG icon system and extension mapping
101
+ - [REST API](REST_API.md) - Filesystem service endpoints
102
+ - [Configuration](Configuration.md) - AppData state and file entry format
103
+
104
+ ## Related Packages
105
+
106
+ - [pict](https://github.com/stevenvelozo/pict) - Core application framework
107
+ - [pict-view](https://github.com/stevenvelozo/pict-view) - View base class
108
+ - [pict-provider](https://github.com/stevenvelozo/pict-provider) - Provider base class
109
+ - [orator](https://github.com/stevenvelozo/orator) - API server framework
110
+ - [fable](https://github.com/stevenvelozo/fable) - Service infrastructure
@@ -0,0 +1,15 @@
1
+ - Getting Started
2
+
3
+ - [Introduction](/)
4
+ - [Configuration](Configuration.md)
5
+
6
+ - Architecture
7
+
8
+ - [Providers](Providers.md)
9
+ - [Views](Views.md)
10
+ - [Layouts](Layouts.md)
11
+ - [Icons](Icons.md)
12
+
13
+ - Service
14
+
15
+ - [REST API](REST_API.md)
@@ -0,0 +1,7 @@
1
+ # Pict Section FileBrowser
2
+
3
+ - [Overview](README.md)
4
+ - [Providers](Providers.md)
5
+ - [Views](Views.md)
6
+ - [REST API](REST_API.md)
7
+ - [GitHub](https://github.com/stevenvelozo/pict-section-filebrowser)
package/docs/cover.md ADDED
@@ -0,0 +1,11 @@
1
+ # Pict-Section-FileBrowser <small>1</small>
2
+
3
+ > A composable file browser section with modular browsing, listing, and viewing views
4
+
5
+ - Multiple layout modes with lazy-loaded folder tree navigation
6
+ - Five independent providers: Browse, List, View, Layout, Icons
7
+ - Built-in REST API service and CLI utility for instant file serving
8
+ - Hand-drawn SVG icon system with automatic file type detection
9
+
10
+ [GitHub](https://github.com/stevenvelozo/pict-section-filebrowser)
11
+ [Get Started](#pict-section-filebrowser)
@@ -0,0 +1,73 @@
1
+ /* ============================================================================
2
+ Pict Docuserve - Base Styles
3
+ ============================================================================ */
4
+
5
+ /* Reset and base */
6
+ *, *::before, *::after {
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ html, body {
11
+ margin: 0;
12
+ padding: 0;
13
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
14
+ font-size: 16px;
15
+ line-height: 1.5;
16
+ color: #423D37;
17
+ background-color: #fff;
18
+ -webkit-font-smoothing: antialiased;
19
+ -moz-osx-font-smoothing: grayscale;
20
+ }
21
+
22
+ /* Typography */
23
+ h1, h2, h3, h4, h5, h6 {
24
+ margin-top: 0;
25
+ line-height: 1.3;
26
+ }
27
+
28
+ a {
29
+ color: #2E7D74;
30
+ text-decoration: none;
31
+ }
32
+
33
+ a:hover {
34
+ color: #256861;
35
+ }
36
+
37
+ /* Application container */
38
+ #Docuserve-Application-Container {
39
+ min-height: 100vh;
40
+ }
41
+
42
+ /* Utility: scrollbar styling */
43
+ ::-webkit-scrollbar {
44
+ width: 8px;
45
+ }
46
+
47
+ ::-webkit-scrollbar-track {
48
+ background: #F5F0E8;
49
+ }
50
+
51
+ ::-webkit-scrollbar-thumb {
52
+ background: #D4CCBE;
53
+ border-radius: 4px;
54
+ }
55
+
56
+ ::-webkit-scrollbar-thumb:hover {
57
+ background: #B5AA9A;
58
+ }
59
+
60
+ /* Responsive adjustments */
61
+ @media (max-width: 768px) {
62
+ html {
63
+ font-size: 14px;
64
+ }
65
+
66
+ #Docuserve-Sidebar-Container {
67
+ display: none;
68
+ }
69
+
70
+ .docuserve-body {
71
+ flex-direction: column;
72
+ }
73
+ }
@@ -0,0 +1,39 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <meta name="description" content="Documentation powered by pict-docuserve">
8
+
9
+ <title>Documentation</title>
10
+
11
+ <!-- Application Stylesheet -->
12
+ <link href="css/docuserve.css" rel="stylesheet">
13
+ <!-- KaTeX stylesheet for LaTeX equation rendering -->
14
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css">
15
+ <!-- PICT Dynamic View CSS Container -->
16
+ <style id="PICT-CSS"></style>
17
+
18
+ <!-- Load the PICT library from jsDelivr CDN -->
19
+ <script src="https://cdn.jsdelivr.net/npm/pict@1/dist/pict.min.js" type="text/javascript"></script>
20
+ <!-- Bootstrap the Application -->
21
+ <script type="text/javascript">
22
+ //<![CDATA[
23
+ Pict.safeOnDocumentReady(() => { Pict.safeLoadPictApplication(PictDocuserve, 2)});
24
+ //]]>
25
+ </script>
26
+ </head>
27
+ <body>
28
+ <!-- The root container for the Pict application -->
29
+ <div id="Docuserve-Application-Container"></div>
30
+
31
+ <!-- Mermaid diagram rendering -->
32
+ <script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
33
+ <script>mermaid.initialize({ startOnLoad: false, theme: 'default' });</script>
34
+ <!-- KaTeX for LaTeX equation rendering -->
35
+ <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.js"></script>
36
+ <!-- Load the Docuserve PICT Application Bundle from jsDelivr CDN -->
37
+ <script src="https://cdn.jsdelivr.net/npm/pict-docuserve@0/dist/pict-docuserve.min.js" type="text/javascript"></script>
38
+ </body>
39
+ </html>
@@ -0,0 +1,100 @@
1
+ {
2
+ "Generated": "2026-02-21T23:23:27.842Z",
3
+ "GitHubOrg": "stevenvelozo",
4
+ "DefaultBranch": "master",
5
+ "Groups": [
6
+ {
7
+ "Name": "Dist",
8
+ "Key": "dist",
9
+ "Description": "",
10
+ "Modules": [
11
+ {
12
+ "Name": "indoctrinate_content_staging",
13
+ "Repo": "indoctrinate_content_staging",
14
+ "Group": "dist",
15
+ "Branch": "master",
16
+ "HasDocs": false,
17
+ "HasCover": false,
18
+ "Sidebar": [],
19
+ "DocFiles": []
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "Name": "Docs",
25
+ "Key": "docs",
26
+ "Description": "",
27
+ "Modules": [
28
+ {
29
+ "Name": "css",
30
+ "Repo": "css",
31
+ "Group": "docs",
32
+ "Branch": "master",
33
+ "HasDocs": true,
34
+ "HasCover": false,
35
+ "Sidebar": [],
36
+ "DocFiles": [
37
+ "css/docuserve.css"
38
+ ]
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "Name": "Source",
44
+ "Key": "source",
45
+ "Description": "",
46
+ "Modules": [
47
+ {
48
+ "Name": "bin",
49
+ "Repo": "bin",
50
+ "Group": "source",
51
+ "Branch": "master",
52
+ "HasDocs": false,
53
+ "HasCover": false,
54
+ "Sidebar": [],
55
+ "DocFiles": []
56
+ },
57
+ {
58
+ "Name": "providers",
59
+ "Repo": "providers",
60
+ "Group": "source",
61
+ "Branch": "master",
62
+ "HasDocs": false,
63
+ "HasCover": false,
64
+ "Sidebar": [],
65
+ "DocFiles": []
66
+ },
67
+ {
68
+ "Name": "services",
69
+ "Repo": "services",
70
+ "Group": "source",
71
+ "Branch": "master",
72
+ "HasDocs": false,
73
+ "HasCover": false,
74
+ "Sidebar": [],
75
+ "DocFiles": []
76
+ },
77
+ {
78
+ "Name": "views",
79
+ "Repo": "views",
80
+ "Group": "source",
81
+ "Branch": "master",
82
+ "HasDocs": false,
83
+ "HasCover": false,
84
+ "Sidebar": [],
85
+ "DocFiles": []
86
+ },
87
+ {
88
+ "Name": "www",
89
+ "Repo": "www",
90
+ "Group": "source",
91
+ "Branch": "master",
92
+ "HasDocs": false,
93
+ "HasCover": false,
94
+ "Sidebar": [],
95
+ "DocFiles": []
96
+ }
97
+ ]
98
+ }
99
+ ]
100
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "Generated": "2026-02-21T23:23:27.922Z",
3
+ "DocumentCount": 0,
4
+ "LunrIndex": {
5
+ "version": "2.3.9",
6
+ "fields": [
7
+ "title",
8
+ "module",
9
+ "group",
10
+ "body"
11
+ ],
12
+ "fieldVectors": [],
13
+ "invertedIndex": [],
14
+ "pipeline": [
15
+ "stemmer"
16
+ ]
17
+ },
18
+ "Documents": {}
19
+ }
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "pict-section-filebrowser",
3
+ "version": "0.0.1",
4
+ "description": "Pict file browser section - composable browsing, listing, and viewing views for file system navigation",
5
+ "main": "source/Pict-Section-FileBrowser.js",
6
+ "bin": {
7
+ "browse": "./source/bin/browse.js"
8
+ },
9
+ "scripts": {
10
+ "start": "node source/Pict-Section-FileBrowser.js",
11
+ "test": "npx mocha -u tdd -R spec",
12
+ "tests": "npx mocha -u tdd --exit -R spec --grep",
13
+ "coverage": "npx nyc --reporter=lcov --reporter=text-lcov npx mocha -- -u tdd -R spec",
14
+ "build": "npx quack build"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/stevenvelozo/pict-section-filebrowser.git"
19
+ },
20
+ "author": "steven velozo <steven@velozo.com>",
21
+ "license": "MIT",
22
+ "bugs": {
23
+ "url": "https://github.com/stevenvelozo/pict-section-filebrowser/issues"
24
+ },
25
+ "homepage": "https://github.com/stevenvelozo/pict-section-filebrowser#readme",
26
+ "dependencies": {
27
+ "fable": "^3.1.58",
28
+ "fable-serviceproviderbase": "^3.0.16",
29
+ "orator": "^6.0.2",
30
+ "orator-serviceserver-restify": "^2.0.7",
31
+ "pict-provider": "^1.0.10",
32
+ "pict-view": "^1.0.66"
33
+ },
34
+ "devDependencies": {
35
+ "chai": "^6.2.2",
36
+ "mocha": "^11.7.5",
37
+ "pict": "^1.0.350",
38
+ "quackage": "^1.0.56"
39
+ },
40
+ "mocha": {
41
+ "diff": true,
42
+ "extension": [
43
+ "js"
44
+ ],
45
+ "package": "./package.json",
46
+ "reporter": "spec",
47
+ "slow": "75",
48
+ "timeout": "5000",
49
+ "ui": "tdd",
50
+ "watch-files": [
51
+ "source/**/*.js",
52
+ "test/**/*.js"
53
+ ],
54
+ "watch-ignore": [
55
+ "lib/vendor"
56
+ ]
57
+ }
58
+ }