littleshop/LittleShop/wwwroot/lib/handsontable/languages/en-US.min.js
sysadmin 76efba55bd feat: Phase 2.5 - Variant Collections Spreadsheet Editor
Replaces JSON textarea with professional Excel-like spreadsheet interface for managing product variant properties.

Features:
- Handsontable 14.6.1 spreadsheet component
- Property presets (Size, Color, Material, Storage, Custom)
- Inline cell editing with Tab/Enter navigation
- Context menu for add/remove rows and columns
- Keyboard shortcuts (Ctrl+D delete, Ctrl+Enter save, Ctrl+Z undo)
- Mobile touch gestures (swipe to delete rows)
- Automatic JSON serialization on form submit
- Form validation before saving
- Comprehensive user guide documentation

Files Changed:
- LittleShop/package.json: NPM package management setup
- LittleShop/wwwroot/js/variant-editor.js: 400-line spreadsheet editor module
- LittleShop/wwwroot/lib/handsontable/: Handsontable library (Community Edition)
- LittleShop/wwwroot/lib/hammerjs/: Hammer.js touch gesture library
- LittleShop/Areas/Admin/Views/VariantCollections/Edit.cshtml: Spreadsheet UI integration
- VARIANT_COLLECTIONS_USER_GUIDE.md: Complete user guide (18+ pages)

Technical Details:
- Excel-like editing experience (no more manual JSON editing)
- Mobile-first responsive design
- Browser compatibility: Chrome 90+, Firefox 88+, Edge 90+, Safari 14+
- Touch-optimized for mobile administration
- Automatic data validation and error handling
2025-11-13 19:40:06 +00:00

1 line
4.6 KiB
JavaScript

!function(E,T){if("object"==typeof exports&&"object"==typeof module)module.exports=T(require("handsontable"));else if("function"==typeof define&&define.amd)define(["handsontable"],T);else{var _="object"==typeof exports?T(require("handsontable")):T(E.Handsontable);for(var N in _)("object"==typeof exports?exports:E)[N]=_[N]}}("undefined"!=typeof self?self:this,(E=>(()=>{var T={330:T=>{"use strict";T.exports=E},436:E=>{E.exports=function(E){return E&&E.__esModule?E:{default:E}},E.exports.__esModule=!0,E.exports.default=E.exports}},_={};function N(E){var e=_[E];if(void 0!==e)return e.exports;var O=_[E]={exports:{}};return T[E](O,O.exports,N),O.exports}var e={};return(()=>{"use strict";var E=N(436)(N(330));const T=E.default.languages.dictionaryKeys,_={languageCode:"en-US",[T.CONTEXTMENU_ITEMS_NO_ITEMS]:"No available options",[T.CONTEXTMENU_ITEMS_ROW_ABOVE]:"Insert row above",[T.CONTEXTMENU_ITEMS_ROW_BELOW]:"Insert row below",[T.CONTEXTMENU_ITEMS_INSERT_LEFT]:"Insert column left",[T.CONTEXTMENU_ITEMS_INSERT_RIGHT]:"Insert column right",[T.CONTEXTMENU_ITEMS_REMOVE_ROW]:["Remove row","Remove rows"],[T.CONTEXTMENU_ITEMS_REMOVE_COLUMN]:["Remove column","Remove columns"],[T.CONTEXTMENU_ITEMS_UNDO]:"Undo",[T.CONTEXTMENU_ITEMS_REDO]:"Redo",[T.CONTEXTMENU_ITEMS_READ_ONLY]:"Read only",[T.CONTEXTMENU_ITEMS_CLEAR_COLUMN]:"Clear column",[T.CONTEXTMENU_ITEMS_ALIGNMENT]:"Alignment",[T.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]:"Left",[T.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]:"Center",[T.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]:"Right",[T.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]:"Justify",[T.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]:"Top",[T.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]:"Middle",[T.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]:"Bottom",[T.CONTEXTMENU_ITEMS_FREEZE_COLUMN]:"Freeze column",[T.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]:"Unfreeze column",[T.CONTEXTMENU_ITEMS_BORDERS]:"Borders",[T.CONTEXTMENU_ITEMS_BORDERS_TOP]:"Top",[T.CONTEXTMENU_ITEMS_BORDERS_RIGHT]:"Right",[T.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]:"Bottom",[T.CONTEXTMENU_ITEMS_BORDERS_LEFT]:"Left",[T.CONTEXTMENU_ITEMS_REMOVE_BORDERS]:"Remove border(s)",[T.CONTEXTMENU_ITEMS_ADD_COMMENT]:"Add comment",[T.CONTEXTMENU_ITEMS_EDIT_COMMENT]:"Edit comment",[T.CONTEXTMENU_ITEMS_REMOVE_COMMENT]:"Delete comment",[T.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]:"Read-only comment",[T.CONTEXTMENU_ITEMS_MERGE_CELLS]:"Merge cells",[T.CONTEXTMENU_ITEMS_UNMERGE_CELLS]:"Unmerge cells",[T.CONTEXTMENU_ITEMS_COPY]:"Copy",[T.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]:["Copy with header","Copy with headers"],[T.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]:["Copy with group header","Copy with group headers"],[T.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]:["Copy header only","Copy headers only"],[T.CONTEXTMENU_ITEMS_CUT]:"Cut",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]:"Insert child row",[T.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]:"Detach from parent",[T.CONTEXTMENU_ITEMS_HIDE_COLUMN]:["Hide column","Hide columns"],[T.CONTEXTMENU_ITEMS_SHOW_COLUMN]:["Show column","Show columns"],[T.CONTEXTMENU_ITEMS_HIDE_ROW]:["Hide row","Hide rows"],[T.CONTEXTMENU_ITEMS_SHOW_ROW]:["Show row","Show rows"],[T.FILTERS_CONDITIONS_NONE]:"None",[T.FILTERS_CONDITIONS_EMPTY]:"Is empty",[T.FILTERS_CONDITIONS_NOT_EMPTY]:"Is not empty",[T.FILTERS_CONDITIONS_EQUAL]:"Is equal to",[T.FILTERS_CONDITIONS_NOT_EQUAL]:"Is not equal to",[T.FILTERS_CONDITIONS_BEGINS_WITH]:"Begins with",[T.FILTERS_CONDITIONS_ENDS_WITH]:"Ends with",[T.FILTERS_CONDITIONS_CONTAINS]:"Contains",[T.FILTERS_CONDITIONS_NOT_CONTAIN]:"Does not contain",[T.FILTERS_CONDITIONS_GREATER_THAN]:"Greater than",[T.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]:"Greater than or equal to",[T.FILTERS_CONDITIONS_LESS_THAN]:"Less than",[T.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]:"Less than or equal to",[T.FILTERS_CONDITIONS_BETWEEN]:"Is between",[T.FILTERS_CONDITIONS_NOT_BETWEEN]:"Is not between",[T.FILTERS_CONDITIONS_AFTER]:"After",[T.FILTERS_CONDITIONS_BEFORE]:"Before",[T.FILTERS_CONDITIONS_TODAY]:"Today",[T.FILTERS_CONDITIONS_TOMORROW]:"Tomorrow",[T.FILTERS_CONDITIONS_YESTERDAY]:"Yesterday",[T.FILTERS_VALUES_BLANK_CELLS]:"Blank cells",[T.FILTERS_DIVS_FILTER_BY_CONDITION]:"Filter by condition",[T.FILTERS_DIVS_FILTER_BY_VALUE]:"Filter by value",[T.FILTERS_LABELS_CONJUNCTION]:"And",[T.FILTERS_LABELS_DISJUNCTION]:"Or",[T.FILTERS_BUTTONS_SELECT_ALL]:"Select all",[T.FILTERS_BUTTONS_CLEAR]:"Clear",[T.FILTERS_BUTTONS_OK]:"OK",[T.FILTERS_BUTTONS_CANCEL]:"Cancel",[T.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]:"Search",[T.FILTERS_BUTTONS_PLACEHOLDER_VALUE]:"Value",[T.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]:"Second value",[T.CHECKBOX_CHECKED]:"Checked",[T.CHECKBOX_UNCHECKED]:"Unchecked"};E.default.languages.registerLanguageDictionary(_)})(),e=e.___})()));