Skip to content

Releases: robbiebyrd/classicy

Terminator

29 Oct 01:19

Choose a tag to compare

This release makes progress towards packaging Classicy as an npm package that can be used by other developers. Currently, Classicy components are not directly importable; however, I will fix that in time. This is a preview release only; breaking changes are most likely imminent.

You can view the Classicy package in npm here.

Full Changelog: https://github.com/robbiebyrd/classicy/commits/v0.5.3

SixPack

17 Jul 02:44

Choose a tag to compare

A few minor tweaks to some of the built in apps, but nothing special.

This will be the last release that is a Next.js app; future releases will be a package.

Full Changelog: v0.4.5...v0.4.6

Antares

25 Jun 03:13

Choose a tag to compare

Overview

This PR refactors the News and EPG applications by reorganizing menu definitions, enhancing entry filtering and pagination logic, adding time navigation controls, updating UI window rendering, and includes several housekeeping updates across core components and documentation.

The News and EPG applications are demonstrations of the technology, and not vital to the Classicy library.

Details

Enhance News and EPG applications by adding a File menu, pagination controls, and per-page settings; refactor time handling and window management; improve AppManager focus logic; introduce Finder launch checks; update documentation and clean up unused assets.

New Features:

  • Add 'File' menu with Quit option to News and EPG applications
  • Introduce pagination controls and per-page/thumbnail size settings in the News application
  • Display detailed news items in separate windows with dynamic positioning and rich content rendering

Bug Fixes:

  • Prevent pagination from exceeding available news entries

Enhancements:

  • Refactor news entries filtering/slicing with timezone offsets
  • Centralize EPG grid time jump functions and expose settings toggle
    -Improve app focus logic in AppManager to focus the last open app
  • Add Finder icon state check based on open windows path
  • Standardize iframe title in Browser component

Documentation:

  • Update README header, demo link formatting, and note previous project name

Chores:

  • Remove obsolete News titles.txt file

File-Level Changes

Change Details Files
Refactor News app menu, entry filtering, pagination, and window rendering
  • Moved appMenu definition to top-level and passed into ClassicyWindow
  • Introduced filteredEntries and displayEntries with timezone offset adjustment
  • Enhanced paginate function to prevent offset overflow
  • Updated main and detail windows with enriched props and dynamic positioning
  • Restyled news header, entry list, and detail view using Classicy components
src/app/Applications/News/News.tsx
Add file menu to EPG and implement time navigation controls
  • Defined appMenu for the EPG component
  • Moved showSettings and gridStart initialization closer to useState calls
  • Computed currentTime, indicator, and refactored round-down logic
  • Implemented jumpBack, jumpForward, and jumpToNow handlers
  • Removed testClick debug handler
src/app/Applications/EPG/EPG.tsx
Update README formatting and link structure
  • Rebranded main title and added 'Previously Platinum' subtitle
  • Promoted demo link to an H3 header
  • Removed Storybook setup instructions
README.md
Simplify AppManager close logic and correct focus on last open app
  • Replaced lastOpenApp helper with a direct find call
  • Added guard before focusing on the last open app
  • Removed redundant focusApp invocation
src/app/SystemFolder/ControlPanels/AppManager/ClassicyAppManager.ts
Handle Finder icon launch state separately
  • Added special-case logic to detect open Finder windows by ID
  • Defaulted other apps to existing open-state check
src/app/SystemFolder/SystemResources/Desktop/ClassicyDesktopIcon.tsx
Streamline Finder component data initialization
  • Destructured openPaths earlier from app data
  • Removed duplicate openPaths declaration inside return
src/app/SystemFolder/Finder/Finder.tsx
Fix Browser iframe title attribute
  • Changed iframe title from 'myBook' to 'browserIframe'
src/app/Applications/Browser/Browser.tsx
Remove obsolete News titles file
  • Deleted unused titles.txt in News application
src/app/Applications/News/titles.txt

v0.4.4

23 Jun 19:58

Choose a tag to compare

Overview

This release implements a suite of UI component and layout enhancements across multiple control-panel managers and applications, extending background customization and sound toggling, refining component APIs, improving window styling, enriching the EPG app with a settings dialog and indicator refinement, and adding a new “News” application.

Details

Add custom desktop background URL support with alignment, repeat, and sizing controls; enhance core UI components and layouts; introduce individual sound toggles; extend popup menus; improve file browser and window styling; add EPG settings modal; and ship a new News application with paginated entries and detail windows.

New Features:

  • Enable custom desktop background via URL with position, repeat, and size options
  • Allow per-sound enable/disable controls in the Sound Manager
  • Add a new News application with paginated listing and detail windows
  • Provide a settings modal for the EPG application

Enhancements:

  • Wrap window contents in a styled container with consistent background, padding, and box-sizing
  • Switch control panel windows from modal to non-modal and adjust their initial sizes and positions
    -Implement window title text overflow handling with ellipsis
  • Extend popup menus to accept icons, custom styles, and center alignment
  • Improve file browser table column resizing behavior

Chores:

  • Comment out trash icon dispatch (for now)

File-Level Changes

Change Details Files
Custom background URL support in Appearance Manager
  • Introduce a regex validator for URLs
  • Add ClassicyInput field and dispatch handlers for URL, position, repeat, size
  • Update DesktopManager to handle new background actions
ClassicyAppearanceManager.tsx
ClassicyDesktopManager.tsx
Uniform styled wrappers for control-panel windows
  • Wrap contents in a padded, background-colored
  • Disable modal behavior on windows for flexible embedding
ClassicyAppearanceManager.tsx
ClassicyDateAndTimeManager.app.tsx
ClassicySoundManager.tsx
Per-sound enable/disable logic in Sound Manager
  • Change changeSounds API to boolean signature
  • Add disableSounds handler and bind per-checkbox
  • Extend reducer with enableOne/disableOne and debug logging
ClassicySoundManager.tsx
ClassicySoundManagerContext.tsx
EPG application settings UI and indicator tweaks
  • Switch to a TV icon and remove unused imports
  • Add showSettings state with a Settings window and trigger button
  • Refine current-time indicator rendering and CSS (.epgIndicatorCenter)
EPG.tsx
EPG.module.scss
Component API & behavior updates (Checkbox, RadioInput, PopUpMenu)
  • Normalize onClickFunc to (checked
id) signatures
  • Ensure correct internal state updates and disable handling
  • Accept icon/style props and center alignment in PopUpMenu
  • File browser table resizing improvements
    • Set columnResizeMode to 'onChange'
    • Increase resizer hit area and handle isResizing CSS class
    ClassicyFileBrowserViewTable.tsx
    ClassicyFileBrowserViewTable.module.scss
    Window component styling and title truncation
    • Add contrast filter for inactive window
    • Wrap title text in

      with ellipsis overflow

    • Adjust modal title bar sizing
    ClassicyWindow.tsx
    ClassicyWindow.module.scss
    Finder trash-icon dispatch commented out
    • Comment out desktopEventDispatch for ‘finder_trash’
    Finder.tsx
    Demo app error-modal auto-focus and ID updates
    • Rename window ID to 'demo_error_modal'
    • Use useEffect to fire ClassicyWindowFocus on mount
    Demo.tsx
    New News application
    • Add News.tsx with listing and detail windows
    • Include entries.json and module scoped styling
    • Import News into page.tsx
    News.tsx
    News.module.scss
    entries.json
    page.tsx

    v0.4.3

    20 Jun 20:51

    Choose a tag to compare

    v0.4.3

    A bug and cleanup release.

    Overview

    Refactor media and menu handling across multiple apps, streamline QuickTimePlayer into a lightweight shell using a new embed component, unify quit menu logic, and apply type, styling, and behavior fixes in EPG, date/time manager, and desktop icon detection.

    New Features:

    • Extract QuickTime video/audio rendering into a new QuickTimeVideoEmbed component
    • Introduce a quitMenuItemHelper to standardize “Quit” menu entries across all applications

    Bug Fixes:

    • Enable scrolling in QuickTime window
    • Remove stray console.log calls in file browser and finder contexts

    Enhancements:

    • Simplify QuickTimeMoviePlayer by delegating playback to the embed component and adjust default sample document
    • Rename QuickTime app ID and restrict document type to 'audio' or 'video'
    • Refine EPG: rename callsign to callSign, clarify unit comments, and improve grid indicator styling and z-index
    • Export and rename QuickTimeContext document types, guard document array handling, and emit app open events on file changes
    • Update Desktop icon detection to use the app ‘open’ flag instead of raw presence
    • Rename date/time manager handlers and correct PM hour wrap logic

    Chores:

    • Clean up unused imports and remove inline quitApp functions across multiple components

    Changelog

    Full Changelog: v0.4.2...v0.4.3

    v0.4.2

    20 Jun 17:48

    Choose a tag to compare

    Summary

    Introduce a full-fledged Electronic Program Guide (EPG) demonstration application, as well as modernize core infrastructure by refactoring window and file‐system management, unifying menu interfaces, and enhancing key UI components and styling.

    Overview

    This release implements a major refactor of the system app and window management architecture—migrating from array‐based storage to a keyed object store, streamlining event handlers, extracting and reshaping the file system model, modernizing React hooks and component APIs, and introducing a new EPG application with its own UI grid.

    New Features:

    • Add a new EPG application with a live channel guide grid and navigation controls
    • Implement sortable columns in the file browser’s table view and dynamic icon grid layout
    • Enable arrow‐key increment/decrement functionality in both DatePicker and TimePicker inputs

    Bug Fixes:

    • Fix Finder’s openPaths initialization to start empty instead of defaulting to a hardcoded path
    • Correct synchronization of appMenu/menuBar assignments when focusing or opening windows

    Enhancements:

    • Refactor window manager state to use an appId-keyed map for faster lookups and simpler reducer logic
    • Extract file‐system model and default content into dedicated modules and streamline ClassicyFileSystem usage
    • Migrate components to direct hook imports (useState/useEffect/etc.), remove unnecessary Suspense, and consolidate menuBar and contextMenu naming
    • Update ClassicyWindow to support error‐style dialogs, non‐movable error modals, and play error sounds

    Chores:

    • Rename core control-panel and manager components to a unified Classicy* naming convention
    • Apply SCSS mixins and optimize style definitions for window borders, progress bars, and theme assets

    Reviewer's Guide

    This PR implements a major refactor of the system app and window management architecture—migrating from array‐based storage to a keyed object store, streamlining event handlers, extracting and reshaping the file system model, modernizing React hooks and component APIs, and introducing a new EPG application with its own UI grid.

    Sequence diagram for window open/focus/close with new keyed app store

    sequenceDiagram
        participant User as actor User
        participant AppManager as ClassicyAppManagerHandler
        participant Store as ClassicyStore
        participant App as ClassicyStoreSystemApp
        participant Window as ClassicyStoreSystemAppWindow
    
        User->>AppManager: openApp(appId, appName, appIcon)
        AppManager->>Store: Store.System.Manager.App.apps[appId] = {...}
        AppManager->>App: set open = true, windows = [...]
        AppManager->>AppManager: focusApp(appId)
        AppManager->>App: set focused = true
        AppManager->>Window: set closed = false, focused = true
    
        User->>AppManager: closeApp(appId)
        AppManager->>App: set open = false, focused = false
        AppManager->>Window: set closed = true
        AppManager->>AppManager: focusApp(lastOpenApp())

    Class diagram for updated App and Window management

    classDiagram
        class ClassicyStoreSystemAppManager {
            +apps: Record<string, ClassicyStoreSystemApp>
        }
        class ClassicyStoreSystemApp {
            +id: string
            +name: string
            +icon: string
            +windows: ClassicyStoreSystemAppWindow[]
            +open: boolean
            +focused: boolean
            +noDesktopIcon: boolean
            +openOnBoot: boolean
            +data: any
        }
        class ClassicyStoreSystemAppWindow {
            +id: string
            +appId: string
            +title: string
            +icon: string
            +size: [number, number]
            +position: [number, number]
            +minimumSize: [number, number]
            +focused: boolean
            +default: boolean
            +closed: boolean
            +hidden: boolean
            +menuBar: ClassicyMenuItem[]
            +contextMenu: ClassicyMenuItem[]
            +showContextMenu: boolean
            +options: Record<string, any>[]
            +dragging: boolean
            +moving: boolean
            +modal: boolean
        }
        ClassicyStoreSystemAppManager "1" -- "*" ClassicyStoreSystemApp : apps
        ClassicyStoreSystemApp "1" -- "*" ClassicyStoreSystemAppWindow : windows

    Class diagram for refactored File System model

    classDiagram
        class ClassicyFileSystemEntryFileType {
            <<enum>>
            File
            Shortcut
            AppShortcut
            Drive
            Directory
        }
        class ClassicyFileSystemEntryMetadata {
            +_type: ClassicyFileSystemEntryFileType
            +_mimeType: string
            +_label: string
            +_comments: string
            +_url: string
            +_icon: string
            +_badge: React.ReactNode
            +_createdOn: Date
            +_modifiedOn: Date
            +_versions: ClassicyFileSystemEntry[]
            +_readOnly: boolean
            +_nameLocked: boolean
            +_trashed: boolean
            +_system: boolean
            +_invisible: boolean
            +_count: number
            +_countHidden: number
            +_path: string
            +_data: any
            +_size: number
            +_name: string
        }
        class ClassicyFileSystemEntry {
            +[entry: string]: any
            +inherits ClassicyFileSystemEntryMetadata
        }
        ClassicyFileSystemEntry --|> ClassicyFileSystemEntryMetadata

    File-Level Changes

    Change Details Files
    Migrate App storage from arrays to key-indexed objects
    • Change apps: ClassicyStoreSystemApp.apps from ClassicyStoreSystemApp[] to Record<string,...>
    • Replace .findIndex/.map with direct lookup ds.System.Manager.App.apps[appId]
    • Add new ClassicyAppLoad action to pre-register apps
    src/app/SystemFolder/ControlPanels/AppManager/ClassicyAppManager.ts
    src/app/SystemFolder/SystemResources/Desktop/ClassicyDesktopManager.tsx
    src/app/SystemFolder/ControlPanels/AppManager/ClassicyAppManagerContext.tsx
    Streamline window event handling and enrich action types
    • Update ClassicyWindowAction payloads to include typed menuBar arrays
    • Refactor classicyWindowEventHandler: use direct indexing instead of mapping whole apps list
    • Add optional menuBar in window open payload
    • Fix updateWindow to target ds.System.Manager.App.apps[appId].windows
    src/app/SystemFolder/SystemResources/Desktop/ClassicyDesktopWindowManagerContext.tsx
    Extract and type the file system model
    • Move default FS content into DefaultClassicyFileSystem.ts
    • Introduce ClassicyFileSystemModel.ts with entry metadata types
    • Update ClassicyFileSystem to accept external defaultFS and use new model types
    src/app/SystemFolder/SystemResources/File/DefaultClassicyFileSystem.ts
    src/app/SystemFolder/SystemResources/File/ClassicyFileSystemModel.ts
    src/app/SystemFolder/SystemResources/File/ClassicyFileSystem.ts
    Modernize React components and unify APIs
    • Import and use hooks (useState/useEffect/useMemo) instead of React.useX
    • Rename onClick props to onClickFunc and propagate across components
    • Clean up contextual menu naming and add name prop for unique keys
    • Adjust SCSS mixins and update appearance variables
    multiple components under src/app/SystemFolder/SystemResources (e.g. ClassicyWindow.tsx, ClassicyButton.tsx, ClassicyMenu.tsx)
    SCSS updates across ClassicyWindow.module.scss, appearance.scss, and various UI modules
    Add new EPG application with schedule grid UI
    • Introduce EPG.tsx as new app, manage grid start/end times
    • Create EPG.module.scss for channel/program grid styling
    • Integrate new app into main page.tsx
    src/app/Applications/EPG/EPG.tsx
    src/app/Applications/EPG/EPG.module.scss
    src/app/page.tsx

    Full Changelog: v0.4.1...v0.4.2

    v0.4.1

    28 May 14:11

    Choose a tag to compare

    Enhance media playback, desktop management, and key UI components across the system by adding subtitles support, new desktop icon sorting actions, refined event handling, and improved styling and input handling.

    New Features:

    • Enable subtitle parsing and display in QuickTimePlayer with CC toggle and time-friendly display.
    • Add “Arrange By Name” and “Arrange By Type” options to desktop context menu for icon sorting.
    • Introduce a time format radio selector (12-hour vs. military) in the Date and Time Manager.

    Enhancements:

    • Centralize QuickTimePlayer open-file state and automate window opening/focusing.
    • Refactor desktop icon launching to use event/eventData pattern and remove Suspense wrapper from main desktop.
    • Unify input component behaviors: switch RadioInput to onChange, add click support to ControlLabel, and streamline ClassicyDatePicker code formatting.
    • Strengthen window manager and app manager typings, expose public methods, and add QuickTimePlayer entry to default state.

    Build:

    • Add @plussub/srt-vtt-parser dependency and bump eslint-config-prettier.

    0.4.0

    19 May 14:58

    Choose a tag to compare

    What's Changed

    Introduce new applications, refactor state management, enhance file browsing and UI components, and update build configuration and dependencies.

    New Features:

    • Add Demo app EPG (Electronic Program Guide) application with grid view and navigation controls
    • Add Demo QuickTime Player application with playback, seeking, volume, and fullscreen capabilities
    • Add Date and Time Manager control panel with date picker, time picker, and timezone settings
    • Implement dual-mode file browser views (table and icons) in ClassicyFileBrowser
    • Introduce tabbed panels component (ClassicyTabs) for UI sections
    • Add ClassicyTimePicker and ClassicyDatePicker input controls for manual time and date entry

    Enhancements:

    • Consolidate application, window, desktop, and control-panel state into a unified ClassicyStore with event-based reducer handlers
    • Migrate AppManager and Appearance contexts under ControlPanels namespace and remove Redux
    • Refactor window and desktop components to dispatch events through centralized context APIs
    • Standardize SCSS imports and theming mixins under ControlPanels/AppearanceManager
    • Upgrade Next.js to v15.1.2 and reorganize package.json scripts (build-audio, build-web, serve)
    • Add webpack config to disable minimization for exported build

    0.3.1 The Great Renaming (and other stuff)

    30 May 16:45
    37a8412

    Choose a tag to compare

    What's Changed

    New Contributors

    Full Changelog: 0.3.0...0.3.1

    0.3.0

    09 Feb 06:31
    81da9b1

    Choose a tag to compare

    What's Changed

    Full Changelog: 0.1.4...0.3.0