Neura UI

Loading…

Changelog

What's new in Neura Kit

Every release, parsed straight from CHANGELOG.md — features, improvements and fixes as they shipped.
Latest
v3.0.0
Released
Oct 5, 2026
Releases
90
v3.0.0 Latest

Added

  • Action button: New neura::action-button — the label morphs through idle, pending, and success (pending-label, success-label, reset-after, method, delay). Size, variant, color, rounded, and shadow follow the button packs. Loading uses the ring spinner
  • Split button: New neura::split-button — a primary action plus a menu. Each menu item accepts the same pending-label, success-label, done-label, and reset-after as the main button. Color is set per action
  • Button group: New neura::button-group — segmented control with a sliding indicator. A numeric value scales; other labels crossfade. Items, a more-menu, or slot buttons. orientation, attached, size, variant, color, and rounded
  • Expanding button group: New neura::expanding-button-group — a collapsed label that opens into actions, with confirm-duration. Inner buttons use the same size, variant, color, and rounded packs
  • Confirm morph: New neura::confirm-morph — inline confirm, pending, done, error, retry, and undo (confirm-timeout, result-timeout, undo-method). The progress bar sits on the bottom edge of the control
  • Number field: New neura::number-field — stepper and optional scrub, min / max / step / large-step, prefix and suffix, plural suffix-one / suffix-many, and a limit hint
  • Mention input: New neura::mention-input — @ for people and channels, a suggestion list (placement, max-suggestions), auto-grow rows, and submit-on-enter
  • Signature pad: New neura::signature-pad — canvas signature with ink, nib, signer name, and a PNG download
  • Time dial: New neura::time-dial — a clock face for up to five cities, a working-hours arc, and 12- or 24-hour labels. Only the cursor moves. Noon stays at the top, 6 at the left, 18 at the right, and midnight at the bottom. City marks sit on the face
  • Date reel: New neura::date-reel — scrolling columns for datetime, date, or time, with minute-step, presets, and an optional confirm
  • Activity rings: New neura::activity-rings — up to four goal rings and a day scrubber (metrics, days, focused)
  • JSON viewer: New neura::json-viewer — collapsible tree, search that opens matching branches (capped at 2000), paging (page-size), copy value or path, and keyboard navigation (arrows, Enter, /, Escape). Strings longer than 40 characters ellipsize. Config key json-viewer (rounded follows the global style)
  • Chart types: The native canvas chart accepts donut (doughnut with a hover lift), waffle (10×10, one cell is 1%, filled column by column from the bottom-left), and slope (exactly two moments, start and end labels, rank beside the end, one highlighted series). rows, columns, start-label, end-label, and unit are forwarded as options
  • Motion: Shared tokens in resources/css/motion.css and motion-tokens.ts — duration-fast (160ms), duration-standard (240ms), duration-considered (480ms), duration-spring (580ms), ease-standard, ease-enter, and ease-spring. prefersReducedMotion() drops travel and keeps the end state for scripted motion
  • Appearance: neuraKit({ appearance }) builds the light and dark surface ramp from one hue. style is neutral (gray), muted, tint, or vivid. light (0–1, stock 1) and dark (0–1, stock 0.7) shift the whole ramp together, so borders and text stay in step with the canvas. color defaults to primary
  • i18n: EN / FR strings for the JSON viewer and the new form and action controls

Changed

  • Release: Package version is 3.0.0, MIT, with no license key. Install with composer require neura-ui/neura-kit:^3.0
  • Installer: php artisan neura-kit:install patches the first config it finds — vite.config.js, .mjs, .ts, or .mts — then adds the Tailwind @source line to resources/css/app.css. app.js stays untouched
  • Popups: Dialog, modal, popover, dropdown, context menu, select, command, and the filters “add filter” panel open with the same morph (menu-morph)
  • Tooltip: Travel is short and comes in from the opposite side of the trigger. Reduced motion skips the travel
  • Toast: Stacked from the bottom, three visible with a peek and a scale step, drag to dismiss, optional progress. The factory registers through onAlpineInit
  • Select: The highlighted option and multi-select chips animate. Multiple selection stays on neura::select; there is no separate multi-select component
  • Calendar and date picker: The selected day uses the button-group indicator, on both axes
  • Dropzone: Dashed frame, inset tile, and a preview that follows the surface tokens. The avatar variant is unchanged
  • Table: Toolbar, rows, cells, and pagination use the surface tokens. The search field has no fill and no border, including while focused
  • Filters: The value segment keeps the width from the size pack (w-28 through w-44), so choosing another parameter does not resize the chip
  • Flow: The canvas uses the shared surface, edge, and type colors
  • Kanban: Board, columns, and cards use the surface tokens. Moving a card runs a FLIP
  • Spinner: Buttons and action controls use the ring spinner as the loading indicator
  • Orb: Variants that disappeared on a neutral canvas were retuned so the glyph stays readable in light and dark
  • Native editor: Syntax colors follow the shared highlight palette in light and dark
  • Button group radius: The sliding highlight uses the same radius as the segment, at rest and on hover
  • Reduced motion: The global CSS rule still collapses animation-duration and transition-duration. element.animate() is not affected by that rule, so scripted motion checks prefersReducedMotion() itself

Fixed

  • Rule builder drag: Reordering a rule or an action did not move the node. Drag now reorders within the parent list and writes the new order back
  • Button spinner: The loading mark inside a button did not paint. The ring spinner is rendered in the indicator slot
  • Time dial focus: A focus ring stayed on the face after the pointer left, and the selected time sat on top of the cursor. The face does not keep that outline, and the readout clears the hand
  • Confirm morph progress: The progress bar was offset from the bottom edge. It is flush with the control
  • Button group slots: Buttons passed through the slot did not share the segment height, radius, or indicator. Slot buttons use the same metrics as items
  • Waffle colors: A single backgroundColor painted every cell the same color. Category colors use the array only when it contains more than one distinct color; otherwise they fall back to the palette
  • Slope labels: Start values were drawn on top of the lines, the legend collided with the first column, and end ranks overlapped. Names and start values sit left of the dot, the legend is off, overlapping labels spread, and the y scale follows the data instead of being forced through zero
  • Toast boot: After the stack restyle the factory could miss Alpine’s first walk. It now registers on onAlpineInit, including when Alpine has already started
v2.1.10

Fixed

  • Date picker / calendar selection sync: Input label and calendar highlight could disagree (e.g. input “Sep 17” while day 20 looked selected). displayValue no longer uses new Date('YYYY-MM-DD') (UTC parse); dates are normalized to YYYY-MM-DD; calendar binds via x-modelable instead of $wire.set / fragile x-effect sync
v2.1.9

Fixed

  • Select nested Livewire binding: neura::select no longer strips wire:model / x-model and syncs via this.$wire.set() — that could resolve $wire to the parent modal-manager inside nested modals (PublicPropertyNotFoundException). Binding now uses x-modelable="state" with native wire:model / x-model on the root so Livewire attaches to the owning component
v2.1.8

Fixed

  • Event Calendar mini-calendar locale: The sidebar neura::calendar now receives the parent locale prop (previously only value / first-day-of-week were forwarded, so the mini stayed in English while the main grid respected fr)
  • Translations merge: neura_load_translations() now merges package + app JSON files (package en → package locale → resource_path → lang_path) instead of returning the first file found — a partial app fr.json no longer shadows kit keys such as contributionsInLastYear / weekdayMon
  • Contribution Graph i18n / weekdays: Month headers and cell tooltips use Carbon translatedFormat with the app locale; weekday label column widened (w-9) and no longer uses size-* on the text (that clipped Lun/Mer/Ven into the cell square)
v2.1.7

Fixed

  • Rule Builder Alpine errors: The rule and group branches were rendered with x-show, which only hides the markup via CSS while Alpine still evaluates both branches' expressions — countConditions(item) on a rule (no children) and item.values.map(...) on a group both threw can't access property Symbol.iterator. Switched both blocks to x-if so only the matching branch is evaluated
v2.1.6

Added

  • Rule Builder single-option fields: When a select / multiselect field has exactly one option, the value is auto-selected on rule creation, on field change, and on operator switch; the value renders as a static pill (no dropdown) for select, and the add-chip button is hidden for multiselect
v2.1.5

Added

  • Rule Builder numeric operators: New greater_than and less_than operators available on number and date fields (in addition to is / is_not / empty / not_empty), with default operator is
  • Rule Builder number / date fields: Two new field types — number renders a numeric input (step="any", decimal-friendly) and date renders a native date picker, both backed by the shared text value editor so values stay untouched in rule.values
  • i18n: EN / FR labels for greaterThan (“is greater than” / « est supérieur à ») and lessThan (“is less than” / « est inférieur à »)
v2.1.4

Added

  • Dropzone variants: New variant prop on neura::dropzone — default / solid / card / minimal / cover. Backed by Packs\Dropzone\Variant, PackResolver::dropzoneVariant(), and a neura-kit.dropzone.default.variant config default. Each variant can override the area rounding, shadow, and hide the icon tile (minimal)
  • Select size: size prop on neura::select (xs / sm / md / lg / xl), sharing the Input\Size pack so the trigger matches the neura::input height and padding; options follow the size
  • Filters variants: New variant prop on neura::filters — default / solid / card / minimal. Backed by Packs\Filters\Variant and PackResolver::filtersVariant(); variants control the chip surface, panel surface, and shadow
  • Filters colors: New color prop on neura::filters — primary / secondary / danger / success / warning / info plus any Tailwind color. The tint applies to the add-filter and clear-all buttons only; the active filter chips keep their neutral structural surface
  • Dropzone avatar variant: New avatar variant on neura::dropzone — a circular profile-photo picker. The picked image fills the circle (object-cover), a camera overlay appears on hover, and a small remove button sits on the corner when a photo is set. Text is hidden, the preview list is skipped, and the default icon switches to a camera

Changed

  • Dropzone style: Aligned with the ReUI file-upload look — 1px dashed frame, hover now tints only the border (no background flash), drag shows a soft bg-primary/5 veil (no scale/shadow), and the icon sits in a circular rounded-full bg-muted tile that turns primary while dragging. Transition narrowed to transition-colors
  • Dropzone packs: Packs\Dropzone\Color no longer sets the resting surface (area.base) — surfaces are owned by the variants — and its state classes were recalibrated (border-only hover, primary/5 drag, circular tile states)
v2.1.3

Fixed

  • Navlist stacking: Dropped isolate / unconditional relative on items so Select popups are no longer covered by later nav links
  • Select open state: Root gets z-50 while open so the options panel stacks above following sidebar content
v2.1.2

Added

  • Navlist variants: Item styles default / ghost / soft / rail — set on neura::navlist and inherited by items via @aware (per-item override still works)
  • Navlist group variants: Layout variants default / compact / separated / card (independent from item styles); shared group.label partial

Changed

  • Navlist group: Label accepts a prop or <x-slot:label> for custom content; clearer spacing between groups, labels, and items; default variant no longer draws a left border rail
v2.1.1

Changed

  • Button loading orb: Uses CSS orbVariant (default S3) instead of canvas orbState; drop orbState from the button API
v2.1.0

Added

  • Thinking State: New neura::thinking-state — collapsible “thinking” indicator with optional reasoning steps, progressive reveal, sizes, and Alpine neuraThinkingState
  • Web Search: New neura::web-search — streaming search UI with query label, source list states (pending / loading / done), autoplay / loop, and Alpine neuraWebSearch
  • Todo List: New neura::todo-list — agent-style checklist with pending / active / done statuses, autoplay stepping, collapse, and Alpine neuraTodoList
  • File Diff: New neura::file-diff — compact unified diff card (add / del / ctx rows, file header, +/- counts)
  • Image Generation: New neura::image-generation — generating / done card with prompt, aspect presets, and resolution label
  • Orb CSS engine: Pure-CSS orb variants (Lattice S1–S5, Lens B1–B5, Ring C1–C5, Helix G1–G5, Morph M1–M5) via variant, optional pill / label, backed by OrbCssGeometry and neura::orb.css
  • Button loading orb: loadingIndicator="orb" (or config button.loadingIndicator) replaces the spinner with a CSS orb variant; orbVariant (default S3), orbSize, orbColor with size-aware defaults
  • i18n: EN / FR strings for thinking, web search, todos, file diff, and image generation

Changed

  • Vite plugin imports: Relative TypeScript imports in the config-loaded plugin graph now use explicit .ts extensions for future Vite configLoader: 'native' compatibility
  • Feature loader: Registers lazy Alpine features for thinking-state, web-search, and todo-list
v2.0.16

Added

  • Rule Builder: New neura::rule-builder — nested WHEN / THEN editor with AND/OR groups, locked conditions, multi-select chips, drag-reorder, and If true / If false action branches
  • Rule Builder fields: Same field schema as Filters (select / multiselect / text + operators) for consistent filter/rule configs
  • Rule Builder actions: Configurable THEN actions with typed params (select / text) and live binding via wire:model / x-model / rule-builder-changed
  • Rule Builder packs: Size pack + NeuraKitConfig::ruleBuilder() / PackResolver::ruleBuilderSize(); i18n keys (en/fr) for when/then, combinators, and actions
  • Docs: Atom page + Data nav entry (docs.atoms.rule-builder, premium) with expense-style demo

Fixed

  • Rule Builder rail: Connector used flex-1 bg-edge in a row flex and painted empty grey squares beside AND badges; replaced with a 1px dashed rail
  • Rule Builder Alpine: Nested x-if shells left blank bordered rows; switched primary rule/group toggles to x-show
  • Rule Builder boot: Eager-register neuraRuleBuilder so SPA / first paint no longer throws neuraRuleBuilder is not defined
v2.0.15

Added

  • Emoji Picker: New neura::emoji-picker — native text input with search, categories, recent picks, and insert-at-cursor; variant="button" trigger for composers (for target id, emoji-select event, popupAlign / popupPlacement, closeOnSelect)
  • Emoji data: Bundled category catalog (emoji-data) with localStorage recents; lazy Alpine feature neuraEmojiPicker in the forms chunk
  • Wizard: Compound API with @aware inheritance — set steps, stepProperty, totalSteps, linear, color, and size once on neura::wizard
  • Wizard steps: default / tabs / pills indicators, linear furthest-step locking, keyboard tablist navigation, optional vertical heading / subheading
  • Wizard navigation: Client-only mode (:stepProperty="false"), showCounter, and Alpine fallbacks when no Livewire binding is present
  • Wizard support: Support\Wizard\State for step normalization, size tokens, and shared furthest-step scope keys

Changed

  • Composer: Reworked shell with header / tools / submit / actions slots, primary focus ring, auto-grow textarea, submitOnEnter, and quieter tool-button styling (pairs with emoji-picker button variant)
  • Spotlight manager: Layout and AI response markup refresh for clearer command results and streaming replies
  • Orb: Eager-loaded with the preloader (no longer a lazy widgets chunk) so the boot canvas paints on first frame
  • Feature loader: Boot budget (~800ms) so hung lazy chunks cannot block Livewire/Alpine; late arrivals reinitialise themselves

Fixed

  • Wizard (vertical): Replaced 1fr grid rows with auto so intrinsically sized wizards no longer inflate page height / trigger a second document scrollbar
  • Preloader: maxWait hard cap (default 2.5s) so a hung window load cannot leave the overlay up forever; hides after DOM is interactive + min duration
  • Orb: Synchronous first paint before requestAnimationFrame so the preloader is never a blank canvas on boot
v2.0.14

Added

  • Theme switcher pullcord variant: neura::theme-switcher variant="pullcord" — Verlet hanging-cord toggle; pull past the detent (or click / Enter / Space) to flip light ↔ dark
  • PullCord options: embedded (absolute inside a relative preview), noEntrance, ariaLabel, and physics overrides (gravity, damping, iterations, stretchMax)
  • PullCord CSS vars: Position and ink via --nk-pullcord-top, --nk-pullcord-right, --nk-pullcord-z, --nk-pullcord-ink on any ancestor
  • Theme switch animations: View Transition reveal when toggling light / dark / system — circle, blur-circle, qr-scan, polygon, polygon-gradient, gif, or none (inspired by [react-theme-switch-animation](https://github.com/MinhOmega/react-theme-switch-animation)); ignored for the pullcord variant
  • neura::theme-switcher animation prop: Per-instance animation via data-nk-theme-animation (default circle); works with dropdown, stacked, and inline variants
  • $theme API: Pass a click $event (or element / coordinates) so the reveal originates from the control — $theme.toggle($event), $theme.dark($event), $theme.light($event), $theme.system($event)
  • $theme.configure(): Kit-wide defaults (animationType, duration, easing, blurAmount, gifUrl, …); $theme.animation() reads the active config
  • System preference: When stored theme is system, OS light/dark changes animate through the same View Transition path

Changed

  • JS runtime: Reorganized resources/js/globals/ into features/ (system, overlays, forms, data, media, chart, editor, flow) with a runtime/loader that detects Alpine factories on the page and lazy-loads only what is rendered
  • Vite chunks: Collapses lazy features into five named bundles — neura-forms, neura-widgets, neura-overlays, neura-editor, neura-flow — instead of one tiny file per component
  • Eager surface: Theme, toast, clipboard, translations, icons, preloader, and the @neuraKit overlay managers (modal / sideover / spotlight) stay in the entry chunk
  • Editor: Replaced Tiptap and Editor.js with the kit’s dependency-free native editor (neura::editor / nativeEditor) — A4 pages, toolbar, uploads, and optional Paperdoc export/import
  • Chart: Replaced Chart.js with the kit’s dependency-free native chart (neura::chart / chartComponent) — line, bar, pie, and doughnut on canvas
  • Plugin entry: resources/js/index.ts exports the Vite plugin and presets only — it no longer side-imports the browser runtime (avoids window is not defined when Vite loads the config)

Removed

  • Lottie: neura::lottie component and lottie-web integration removed
  • Tiptap: Editor variant, Blade views, and related JS removed
  • Editor.js: Editor variant, Blade views, editorjs theme CSS, and related JS removed
  • Chart.js: Chart.js adapter and third-party chart dependency removed

Fixed

  • Boot race: Top-level await boot() does not delay DOMContentLoaded; Livewire’s classic script would start Alpine before feature factories registered. Livewire.start is now wrapped so Alpine walks the DOM only after needed chunks have loaded
  • Late SPA features: Feature modules register via onAlpineInit so factories still attach after Alpine has already started (e.g. Livewire navigate)
  • Color picker: Removed $wire from the Alpine data object — JSON.stringify of the Alpine scope was hitting Livewire’s $wire proxy and requesting a non-existent toJSON component method
v2.0.13

Added

  • Contribution Graph: New neura::contribution-graph GitHub-style year heatmap (data as Y-m-d => count or { date, count }), with month / weekday labels, Less→More legend, color (green / primary / emerald), size (sm / md / lg), from / to, custom thresholds, and ContributionGraphBuilder
  • Preloader: New neura::preloader full-page boot overlay with brand, orb or spinner indicator, optional auto-dismiss after window load, and manual NeuraKitPreloader.show() / hide() control
  • File Manager sortable: Drag to reorder siblings or drop onto a folder to move; sortable prop (default true), sort="manual" for custom order, and file-manager:reorder / file-manager:move events
  • i18n: Contribution graph strings (total / per-day tooltips, weekday labels, Less / More) and file manager manual-order / moved / reordered labels (EN + FR)

Improved

  • File Manager (grid): Folder drop targets treat most of the tile as inside (thin left/right edges only for sibling reorder), matching Finder / Explorer icon-view behaviour

Changed

  • Support layout: ContributionGraphBuilder → Support/ContributionGraph/; ChunkedTemporaryFile → Support/Dropzone/ (namespaces updated accordingly)
v2.0.12

Added

  • File Manager: New neura::file-manager browser with list / grid views, breadcrumbs, local or remote search (folder or whole-tree scope), selection, details panel, upload / create / download / delete / rename affordances, and size / color / rounded / shadow packs
  • Dropzone packs: Size and color packs (Packs\Dropzone) plus PackResolver::dropzoneSize() / dropzoneColor() so dropzone density and ink follow config
  • Dropzone previews: Split list (dropzone.item) and grid (dropzone.tile) partials with previewMode (list / grid; grid by default for multiple image uploads)
  • i18n: English and French strings for file manager and dropzone (upload status, ETA, empty folder, search scope, selection, sort / view labels, …)

Improved

  • Dropzone: Reworked Alpine controller — chunked upload with retry, concurrency, cancel / retry actions, duplicate / empty / max-files guards, progress + ETA messaging, and clearer accept / max-files hints
  • Layout header: Tighter mobile padding and gaps, min-w-0 / overflow handling so brand and actions no longer crowd the bar
  • Sidebar toggle: Resolves toggle() from the nearest [data-slot=layout] Alpine scope (works when the button is outside the layout x-data), with type="button" and aria-label
  • Tokens: Lighter --nk-surface-inset and stronger --nk-separator so recessed panels stay bright while hairline dividers remain readable on white

Fixed

  • Layout main: Dropped max-h-screen so nested scroll regions (e.g. docs) are not clipped to the viewport
  • Sidebar: Uses min-h-0 h-full instead of min-h-[calc(100vh-var(--header-height))] for correct flex height inside the layout grid
  • Layout data attributes: data-in-mobile / data-in-tablet / data-collapsed / data-sidebar-open bind to null when false so CSS attribute selectors match only active states
v2.0.11

Added

  • Orb: New neura::orb canvas “thinking” indicator with six states (working, searching, solving, listening, composing, shaping), configurable size / speed, and a semantic color prop (foreground, primary, success, danger, …) driven by currentColor so ink follows light and dark themes live
  • Icon set (Neura): First-party SVG icon set (neura::icons.*) with line / fill variants, optional set="neura", and auto-resolve when the name is unique to Neura
  • Icon animations: Presets via animate + trigger (spin, pulse, ring, float, blink, beat, bounce, nudge, open, wiggle, shake, pop, swing, draw) with loop / hover / once triggers; draw-on plays once when the icon enters the viewport (NeuraKitIcons)
  • Icon stack: New neura::icon-stack isometric stacked-panel frame with size and color packs for decorative empty states
  • Event calendar: New neura::event-calendar with month / week / day / agenda views, mini calendar, configurable hours, and size / rounded / shadow packs

Improved

  • Orb: Theme switches update ink every frame (no longer stuck on the color read at init)
  • Icons: Animation CSS gated with data-play / triggers so draw-on and loop presets behave predictably across builds
v2.0.7

Added

  • Filters: New neura::filters component for building multi-condition filter bars (select, multiselect, and text fields with operators, search, and clear-all)
  • Select actions & panels: neura::select.action, neura::select.panel, and neura::select.option-action for trigger actions, nested option panels, and per-option actions
  • Select options: Prefix / suffix slots on options for icons and inline actions
  • Calendar: Multi-month layout (months), caption dropdowns, date presets, per-day labels, event markers, and optional Today / Reset controls (showToday, showReset)
  • Spotlight AI: SpotlightAiContext helper for streaming replies, suggesting actions, and building chat messages from query history
  • PackResolver: roundedToken(), roundedSides(), otpInputRounded(), and otpGroupRounded() — complete Tailwind class literals for directional / OTP rounding
  • i18n: English and French strings for filter operators (is, contains, startsWith, …), today, reset, clearAll, and selectedCount

Improved

  • Calendar: Loading skeletons for presets and grid while data settles; clearer Today / Reset and preset affordances
  • Select (multiple): Keeps the search query after each pick so users can continue filtering without retyping
  • Select trigger: Server-rendered placeholder text and muted styling until a value is selected (avoids empty flash before Alpine hydrates)

Fixed

  • Autocomplete: No longer opens with the full unfiltered list during the debounce window — filters (or closes) before showing results
  • Input: wire: / x- bindings stay on the inner <input> instead of being merged onto the wrapper
  • OTP: Rounded corners on first/last cells and separator neighbors resolve via PackResolver (Tailwind-scannable classes)
  • Phone input: Country selector and number field use full rounded token + rounded-*-none instead of brittle string replacement on the class name
v2.0.6

Fixed

  • Select / Input / Textarea: rounded and shadow now read from config/neura-kit.php via PackResolver — previously hardcoded so global style.rounded / style.shadow were ignored
  • Card / Dropdown / Modal: same fix for rounded and shadow defaults (card, dropdown, modal-manager included)
  • Tags input / Phone input / Color picker / Checkbox: form controls now inherit input or component config for rounded and shadow
  • Avatar / Popup / OTP: rounded and shadow now read from component config (avatar, popup, otp)
  • Button: shadow now reads from config (global by default); ghost/soft variants stay flat
  • Select options: tighter checkbox-to-label spacing (2-column layout, smaller checkbox, reduced padding/gap)
  • Autocomplete / Calendar / Rich Editor / Dropzone / Fieldset: rounded and shadow now read from config (popup, rich-editor, dropzone, fieldset, or input aliases)
  • Phone / Tags / Color picker popups, Input prefix/suffix, Switch thumb, Radio cards/segmented: wired to popup, input, or toggle config
  • Alert / Callout / Toast / Dialog / Empty State / Sideover: rounded and shadow now read from component config; Popover uses popup config; Progress bar radius reads from progress config (default full)
  • Skeleton / Lottie: skeleton rounded reads from config for button, card, and image variants (circles stay full); lottie SVG drop-shadow reads from lottie config
  • Table / Chart / Tree / Flow / Kanban / Image Gallery / Tabs: rounded and shadow now read from component config; table defaults inherit global style; table relation-count popover uses popup config
  • Badge: removed hardcoded md fallback — uses config default (global)
  • Command / Spotlight / Composer / Context Menu: rounded and shadow now read from component config; Context Menu aliases dropdown config; Button hardcoded lg rounded fallback removed
  • Badge / Alert / Navlist / Avatar config: default rounded (and shadow for avatar) is now global instead of a fixed size
  • Input / Card / Dropdown config: default shadow is now global (inherits style.shadow) instead of a fixed value
v2.0.5

Added

  • Wizard navigation: cancelVariant, previousVariant, nextVariant, finishVariant, and completeVariant props to customize button styles (ghost, soft, outline, primary, primary-soft, etc.)
v2.0.4

Fixed

  • Wizard: Replaced Alpine x-if with x-show on wizard.steps and wizard.navigation, and added wire:ignore — prevents duplicated back buttons and step checkmarks after Livewire re-renders (e.g. clicking Continue)
v2.0.3

Fixed

  • Table (Livewire): variant(), rounded(), shadow(), and density() now read defaults from config/neura-kit.php via PackResolver::componentDefault() — previously hardcoded to default / xl / sm / normal, so global table config (e.g. variant => minimal) was ignored
v2.0.2

Added

  • Dynamic style packs for components previously hardcoded outside config/neura-kit.php:
  • PackResolver helpers: navlistSize, navlistColor, navlistVariant, navbarItem, tabsVariant, linkVariant, calloutColor, tablePack
  • Global helpers: neura_navlist_size, neura_navlist_color, neura_tabs_variant, neura_callout_color

Changed

  • Navlist, navbar, tabs, link, and callout Blade views now resolve styles from config packs and neura_config() defaults
  • Wizard step colors default from neura-kit.wizard config
v2.0.1

Fixed

  • Error component: Slot content (e.g. <neura::error>Message</neura::error>) now renders inside the error wrapper with red styling and data-slot="error" — previously only name and messages props triggered display, so field documentation examples showed no styled error text
v2.0.0

Removed

  • License system: Removed activation flow, license API client, neura-kit:activate, neura-kit:license:status, and related helpers (neura_license, neura_is_activated)
  • Dependencies: Removed unused lorisleiva/laravel-actions requirement

Changed

  • Distribution: Package is open source (MIT); composer.json license aligned with LICENSE
  • Boot: Neura Kit always boots fully without license checks or first-party bypass
  • Install: neura-kit:install and neura-kit:install-dependencies no longer require or mention license activation

Added

  • Neura\Kit\Support\Security\SafeUrlValidator, UploadMimeValidator, LivewireMethodName
  • Editor.js toast bridge (notifier-bridge.ts) routing notifications to NeuraKitToast

Fixed

  • Editor.js: Upload/error notifications now use Neura Kit toasts instead of native Editor.js notifier styling
  • Editor.js: Fixed 401 on image upload when used on public pages (docs) — route middleware defaults to web instead of web,auth; fetch sends session cookies (credentials: 'same-origin')
  • Editor.js: Invalid image blocks from failed uploads are stripped on load to prevent "Block image skipped" errors

Security

  • Routes: Upload and editor utility routes use configurable middleware + throttle (NEURA_KIT_ROUTE_MIDDLEWARE, default web; set web,auth when routes must require authentication)
  • Editor.js: Remote image download disabled by default (NEURA_KIT_EDITOR_ALLOW_REMOTE_IMAGES); SSRF protections via SafeUrlValidator and HTTP client when enabled
  • Chunk uploads: Optional server-side MIME allowlist (NEURA_KIT_UPLOAD_ALLOWED_MIMES) validated per chunk and on assembled files
  • XSS: Select option labels and tags-input suffix now escaped; Spotlight AI markdown output sanitized (HTML escape + safe link URLs)
  • Clipboard: Livewire callback method names validated before JS injection
  • Image storage: Filename extension derived from detected MIME instead of client extension only
v1.1.17

Added

  • Laravel 13 support: Added ^13.0 constraint for illuminate/support and illuminate/view
  • orchestra/testbench: Added ^11.0 constraint for Laravel 13 compatibility
v1.1.16

Fixed

  • ActivateCommand: License key not found despite being set in .env
  • ActivationClient: Same getenv() fix for NEURA_LICENSE_TOKEN, COMPOSER_HOME, HOME, and COMPOSER_AUTH
  • DomainDetector: Same getenv() fix for NEURA_KIT_DOMAINS
v1.1.15

Improved

  • Clipboard: Focus-trap-aware fallback so copy works inside sideovers and modals
  • ClipboardCall (PHP): Single uniform API for all copy use cases

Fixed

  • Clipboard: Copy in sideovers no longer fails when Clipboard API is unavailable or user activation has expired — fallback now runs inside the dialog container so focus trap allows the copy to succeed
v1.1.14

Fixed

  • Table: Bulk actions dropdown and bulk selection banner now react correctly to row selection
v1.1.13

Improved

  • Design tokens: Coherent semantic color system
  • Divider: Uses bg-edge instead of bg-surface-inset for horizontal/vertical lines so divider color matches navlist timeline
  • Timeline: Vertical and horizontal variants use bg-edge instead of bg-surface-inset for consistent line color with navlist and divider
  • Editor (Tiptap toolbar): Vertical separators between icon groups use bg-edge instead of bg-surface-inset for visual consistency
v1.1.12

Improved

  • Layout: Header, main, and layout variants now use array-based class binding with $attributes->class()
v1.1.11

Improved

  • Blade components: All neura view components now use $attributes->merge(['class' => '...']) instead of $attributes->class([...])
v1.1.10

Added

  • Kanban: Card click handler via onCardClick prop
v1.1.9

Added

  • Layout: Theme variants via theme prop
  • Layout: Accent color customization via accentColor prop

Improved

  • Design tokens: Dark mode darker and opaque
  • Table: Variant pack uses semantic design tokens
  • Layout: Main content area uses bg-surface for consistent theming
  • Layout: Header adapts to all themes (contrast, muted, accent)
  • Layout: Simplified accent color system

Fixed

  • Layout: CSS cascade issue with theme token overrides
  • Layout: Muted theme dark mode text colors
v1.1.8

Fixed

  • Table: Dark mode backgrounds now opaque

Added

  • Table: Full-height mode via fullHeight() method
v1.1.7

Fixed

  • Table: Column visibility and bulk action dropdowns no longer clipped by table container
  • Dropdown: handleFocusInOut guarded with !this.open and null checks on $refs to prevent Alpine errors

Added

  • Table: Borderless mode via bordered() method
v1.1.6

Improved

  • Chart: Modern UI aligned with neura-kit design system
  • Flow: Node drag-to-move and edge recalculation
v1.1.5

Added

  • Table Style Packs: Composable design tokens for table appearance
  • Table Enums: Type-safe style configuration via Neura\Kit\Enum\Table\*

Improved

  • Table Structure: Modular sub-components in table/parts/
v1.1.4

Improved

  • Translations API: Efficient cache lifetimes and ETag support
  • Build: Vendor chunk splitting for better browser caching
v1.1.3

Improved

  • Dropdown: Panel and items aligned with neura-kit design system
  • Dropdown submenu: Same styling as main dropdown; trigger and chevron use design tokens
  • Context menu: Matching panel borders/shadows, item text size and colors, separator styling
v1.1.2

Fixed

  • Table: Columns no longer overflow the container when there are many columns
v1.1.1

Improved

  • Card: Border and shadow refinements
  • Sidebar Toggle: Twenty CRM–style and behavior

Removed

  • Card: bordered variant removed to simplify API; use default or outline instead. Existing variant="bordered" falls back to default styling.
v1.1.0

Added

  • Table Inline Editing: Editable columns for inline data modification (inspired by Twenty CRM)
  • Flow Connectable Nodes: Interactive edge creation via click-to-connect handles
  • Navlist: New label and separator subcomponents
  • Sideover: Header, footer, body, and close subcomponents

Improved

  • Theme: Fixed flash of dark mode (FOUC) on page refresh in light mode
  • Sideover: Multiple improvements
  • Flow Component: Visual overhaul for light and dark modes
  • Spotlight / Command Priority: Keyboard shortcut conflict resolution
  • Component Styling: Broad UI refinements across 100+ component views

Fixed

  • Theme: Browser color-scheme now set immediately, preventing native dark scrollbars/backgrounds flash
  • Sideover: Enter transition now works reliably (DOM renders before animation starts)
  • Spotlight + Command: Both no longer open simultaneously on Ctrl+K when a command palette is present
  • Table: Fixed @js() parse error in Blade (replaced with Js::from())
v1.0.48

Added

  • Sideover: Full sideover (drawer) panel system
  • Flow: Alpine Flow integration for workflow/flowchart UI

Fixed

  • SideoverManager: Width override now properly recalculates widthClass when width attribute is passed at open time
  • ActivateCommand: Added error logging on unexpected activation failures

Improved

  • EditorJS theme: Refactored inline color overrides to Tailwind @apply directives
v1.0.47

Improved

  • Table: Notion/Twenty-style UI overhaul
  • Table Columns: Enhanced default column with dash placeholder, alignment, truncate, and hover-copyable support
  • Table Actions: Color variants now properly applied (primary, danger, success, warning, info, ghost, secondary)
  • Popover: Improved hover behavior and UI
  • Popup: Enhanced visual styling
v1.0.46

Improved

  • Spotlight: Modes are now dynamic — only modes with registered providers/commands are shown
  • Clipboard: Enhanced module with better reliability and feedback
v1.0.45

Added

  • Spotlight: AI providers system for streaming AI responses
  • Spotlight: Search providers system for custom search sources
  • Spotlight: make:spotlight artisan command to generate commands, search providers and AI providers
  • Spotlight: SpotlightConfig configuration class with full panel customization
  • Spotlight: SpotlightResult factory methods — url(), action(), event(), livewire(), command(), copy(), modal(), javascript()
  • Spotlight: Enums for SpotlightActionType, SpotlightGroup, SpotlightMode
  • Spotlight: SpotlightCommand enhanced with matches(), getMatchScore(), toResult(), group/icon/shortcut support
  • Spotlight: SpotlightCall fluent API — search(), command(), ai(), placeholder(), query(), open(), toggle(), close()

Improved

  • Spotlight: TypeScript rewrite with typed interfaces and icon SVG map
  • Spotlight: Grouped results with groupedResults computed property
  • Updated translations (en/fr) with all spotlight-related strings
v1.0.44

Fixed

  • Spotlight: Fixed mode not switching when using open({ mode: 'command' }) or open({ mode: 'ai' })
v1.0.43

Added

  • Spotlight: New command palette and search component with multiple modes

Fixed

  • Spotlight: Mode no longer resets when toggling with keyboard shortcuts
v1.0.42

Improved

  • Clipboard: Enhanced Alpine integration and reliability
v1.0.41

Improved

  • Dropdown Submenu: Complete redesign for better UX
  • Dropdown Menu: Custom class merging now works properly
v1.0.40

Fixed

  • Clipboard: Fixed copy not working on Mac/Safari
v1.0.39

Fixed

  • Badge Component: Fixed Tailwind colors not working (red, orange, amber, yellow, lime, green, etc.)
v1.0.38

Fixed

  • Separator Component: Fixed class merging not working properly
v1.0.37

Fixed

  • Phone Input: Enhanced fix for dial code duplication during typing
v1.0.36

Fixed

  • Phone Input: Complete fix for dial code duplication bug
v1.0.35

Fixed

  • License Service: Fixed excessive "Token refresh failed" log spam
v1.0.34

Fixed

  • Phone Input: Fixed dial code duplication bug causing infinite sync loop with Livewire
v1.0.33

Fixed

  • Tree Component: Fixed window is not defined error during Vite build
v1.0.32

Fixed

  • Tree Component: Fixed neuraTree is not defined error when using tree component in modals

Changed

  • Tree Component: Improved TypeScript types for tree component
v1.0.31

Fixed

  • ModalManager: Fixed closeModal() not properly going back to previous modal in stack

Added

  • ModalComponent: Added goBack() method for clearer semantics when navigating modal stack
  • JavaScript: Added NeuraKitModal.goBack() method
v1.0.30

Changed

  • Structure: Improved organization of dropzone-related classes
v1.0.29

Changed

  • Structure: Moved WithDropzone trait from src/Traits/ to src/Concerns/ to follow project conventions

Added

  • WithDropzone Trait: New trait for Livewire components to simplify dropzone file handling
  • DropzoneFiles Collection: New collection class extending Laravel Collection
  • ChunkedTemporaryFile: Improved helper methods
v1.0.28

Fixed

  • Dropzone Component: Fixed Livewire validation error state not displaying correctly

Changed

  • Dropzone Component: Improved error state styling architecture

Added

  • Translations: Added French translations for dropzone component

Technical

  • Refactored dropzone template to use @class Blade directive for conditional classes
  • Added $isInvalid computed variable in Blade for cleaner error detection
  • Simplified JavaScript validation sync logic
  • Removed debug logging from production code
v1.0.27

Fixed

  • Dropzone Component: Fixed validation error state not updating reactively

Changed

  • Dropzone Component: Internationalization improvements

Technical

  • Refactored invalid property to use getter pattern for reactivity
  • Added _invalid private property to store initial validation state
  • Improved error message extraction with translation support
  • Fixed operator precedence issue with || and ?? operators
v1.0.26

Changed

  • Dropzone Component: Complete UI modernization with improved validation error display

Fixed

  • Dropzone Component: Complete fix for validation error display
v1.0.25

Added

  • Tree View Component: Modern, minimalist hierarchical tree component inspired by Notion and shadcn/ui

Fixed

  • Alpine.js initialization issues with proper event listener registration
  • Dropzone Component: Error state styling now properly displays when validation fails
v1.0.24

Added

  • Spinner Component: New loading spinner component with multiple variants and styles
  • Progress Component: New progress bar component for showing completion status
v1.0.23

Fixed

  • Select Component: Fixed default value not being detected when passed as HTML attribute
v1.0.22

Fixed

  • Select Component: Fixed bug when adding custom classes
v1.0.21

Added

  • Select Component: Added value prop for default option selection
v1.0.20

Added

  • Card Component: Enhanced with multiple variants and styling options
v1.0.19

Changed

  • Modal: Refactored Modal classes for better maintainability
v1.0.18

Fixed

  • Modal Manager: Fixed attribute priority logic for maxWidth and maxWidthClass

Changed

  • ModalCall: Auto-sync maxWidthClass when using maxWidth() method
v1.0.17

Fixed

  • Modal Component: Replaced responsive maxWidth classes with simple fixed classes
  • Modal: Fixed maxWidth prop handling for custom values
v1.0.16

Fixed

  • Modal Manager: Fixed maxWidth handling to support both predefined sizes and custom values

Added

  • Phone Input: National prefix handling for phone validation
v1.0.15

Added

  • Phone Input: New comprehensive phone number input component
v1.0.14

Added

  • Wizard Steps: Added size prop for default variant
  • Wizard Steps: Added color prop for customizable step colors

Changed

  • Wizard Steps: Improved default variant UI
v1.0.13

Added

  • Wizard Navigation: Added complete step button support
v1.0.12

Fixed

  • Color Picker: Fixed Livewire wire:model binding not working
v1.0.11

Added

  • Modal Manager: Added nested modals support with stack navigation

Changed

  • Modal Manager: Improved transition animations
v1.0.10

Fixed

  • Color Picker: Fixed Alpine.js error "$disabled is not defined"
v1.0.9

Fixed

  • Select Component: Fixed click-away behavior not closing the dropdown
  • Color Picker: Fixed click-away behavior not closing the popup
v1.0.8

Added

  • Empty State Component: New component for displaying helpful messages when there's no content
v1.0.7

Fixed

  • Context Menu: Complete refactoring with Singleton Manager pattern
  • Color Picker: Improved menu behavior

Changed

  • Context Menu Architecture: Refactored to use ContextMenuManager singleton
v1.0.6

Changed

  • Enhanced Popover Styling: Improved ce-popover with modern Notion-style design

Added

  • EditorJS Notion-style Theme: Complete redesign of EditorJS with Notion-inspired styling
  • Dark Mode Support: Full dark mode support for EditorJS
  • Enhanced Editor Container: Improved editor wrapper styling

Fixed

  • Inline Toolbar Dot Issue: Fixed unwanted dot/bullet appearing in ce-inline-toolbar by default
  • Editor.js Synchronization: Fixed "There is no block at index" error by clearing editor before rendering new content
  • Image Upload Reliability: Major improvements to handle intermittent failures
  • Upload Logging: Comprehensive logging in EditorImageController and ImageStorageService
  • HTTP Headers: Added Accept: application/json header to ensure JSON responses
  • Editor Initialization: Added onReady callback for better initialization tracking

Changed

  • Editor.js now clears content before rendering to prevent block index conflicts
  • Image uploader validates files before sending to server
  • Error handling improved with more descriptive messages and proper error classification
  • Upload process now includes automatic retries for transient failures
  • File storage includes directory creation and permission checks
v1.0.5

Added

  • Editor Multi-Variant System: Modular architecture to support multiple editor types
  • Editor.js Variant: Block-styled editor with structured JSON output
  • Tiptap Variant: WYSIWYG editor with HTML output
  • Editor.js dependencies added to InstallDependenciesCommand.php
  • Complete editor documentation with examples of both variants

Changed

  • Editor Component: Complete refactoring to support variants
  • ChunkController: Renamed from ChunkUploadController for simplification
  • Services Architecture: Clear separation of responsibilities
  • Tests refactored to use controllers instead of Laravel Actions
  • ToastServiceTest and LicenseValidatorTest fixed and all tests passing

Removed

  • Obsolete files: button.blade.php and toolbar.blade.php at editor/ root
  • Old controllers renamed for consistency

Fixed

  • TypeScript errors in editorjs.ts: Replaced EditorJS (namespace) with EditorJSInstance (type)
  • Editor.js toolbox now visible with appropriate CSS styles
  • Signing secret configuration in license tests
  • add() method replaced with flash() in ToastService
  • All unit and feature tests passing (50 tests, 178 assertions)

Security

  • Strict MIME type validation for images (jpeg, png, gif, webp, svg)
  • Configurable maximum size for image uploads
  • URL sanitization for metadata fetching
  • Storage disk existence verification before upload
v1.0.4

Added

  • Chunk Upload System: Integrated and secure chunk upload system
  • Enhanced Alert component with 13 color variants (blue, green, yellow, orange, red, purple, pink, teal, neutral)
  • New Color Variants section in Alert documentation with visual examples
  • Advanced Color Usage examples in Alert documentation
  • Comprehensive Color & Type Reference table in Alert documentation
  • New merge utility for Tailwind class merging
  • Color Picker documentation completely rewritten (Tailwind palette, token/hex/rgb input, Livewire/Alpine examples, hex normalization)

Changed

  • Dropzone: Automatic integration with chunk upload system
  • TestCase: Improved test configuration (encryption key, automatic route loading)
  • Alert component now supports both type (legacy) and color props for better flexibility
  • Improved Alert documentation with expanded property descriptions
  • Updated autocomplete component to use attribute merging instead of class binding
  • Enhanced autocomplete options UI with better visual feedback and spacing
  • Improved empty state design in autocomplete with proper icon component
  • Popup component UI updated to match Notion/shadcn style (rounded-xl, shadow-xl, modern padding, smooth transitions)
  • Popup now uses merge utility instead of class for class merging

Input

  • Improved input component structure and slot support
  • Added extra-slot support for advanced customization
  • Refactored input options (button, clearable, copyable, revealable) for better composability
  • Unified border, focus, and invalid state styles for all input-like components

Checkbox, Radio & Switch

  • Unified border, background, and focus ring colors to match Input component style
  • Improved focus and checked states for better accessibility and visual consistency
  • Refactored Radio and Checkbox components to use PackResolver for dynamic theming
  • Switch component now uses the same color pack logic as Input, Checkbox, and Radio for track and thumb
  • Improved Switch accessibility and keyboard support
  • Updated Switch, Checkbox, and Radio to have consistent active, hover, and disabled states in both light and dark mode

OTP (One-Time Password)

  • OTP input fields now use the same border, focus, and invalid styles as main input fields
  • Improved error display and accessibility for OTP input
  • Unified transition and background for OTP fields in all themes

Avatar & Badge

  • Avatar badge now uses PackResolver::badgeColor and badgeSize for unified color and sizing logic
  • Fixed avatar badge to always be small and fully rounded for consistent appearance
  • Avatar badge rendering now matches badge component logic for color, variant, and size
  • Fixed TypeErrors for badgeColor and badgeSize argument types in avatar component
  • Improved badge positioning and appearance for avatar

Fixed

  • Documentation inconsistencies in Alert component examples
  • Minor styling issues in autocomplete dropdown options
  • Fixed border/focus inconsistencies between input, checkbox, radio, switch, and OTP fields
  • Improved error and invalid state handling for all form components
  • Fixed parse errors and TypeErrors in avatar component after refactor
  • Ensured all badge and avatar logic uses correct argument types and defaults
  • Color Picker refactor: logic extracted to global TypeScript, UI aligned with Input/Popup, dynamic placeholder, systematic hex normalization (token/hex/rgb), wire:model/x-model support

Security

  • Protection against directory traversal in filenames
  • Automatic filename sanitization (special characters, max length 255)
  • Strict file size validation
  • Secure storage in Livewire temporary folder
v1.0.0

Added

  • Initial release of Neura Kit component library
  • All atoms components migrated from main project
  • Service provider for automatic component registration
  • Configuration file for customization
  • Publishing support for views and config
  • 60+ UI components including forms, layout, feedback, navigation, data, and display components
  • Modal system with ModalComponent base class
  • Toast notification system
  • Dialog confirmation system
  • Theme management with dark mode support
  • Vite plugin integration
  • JavaScript API for modals, toasts, and dialogs
  • Artisan commands for modal creation and dependency installation