feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run

- Base: wintercms/winter branch 1.2 (full framework)
- Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS
- Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication
- Partials: hero (offline-first), features, modes (offline/nube toggle),
  screenshots, pricing (3 planes), comparison, FAQ, CTA
- Plugin VivesPOS.Site with ContactForm
- Dockerfile: PHP 8.2 Apache, port 80, healthcheck
- Added winter/wn-pages, blog, sitemap, seo plugins
- Active theme set to vivespos
This commit is contained in:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
<?= $this->makePartial('toolbar') ?>
<div class="layout-row">
<div class="layout-cell">
<div class="layout-relative">
<?= $this->makePartial('components', ['data'=>$data]) ?>
</div>
</div>
</div>

View File

@@ -0,0 +1,39 @@
<div class="components subitems">
<div class="layout">
<div class="layout-row">
<?php
$count = count($components);
?>
<?php foreach ($components as $index => $component): ?>
<?php if ($index > 0 && ($index % 2) == 0): ?>
</div>
<?php if ($index == ($count - 1)): ?>
</div>
<div class="layout single">
<?php endif ?>
<div class="layout-row">
<?php endif ?>
<div class="layout-cell" data-control="dragcomponent" data-component>
<div class="layout-relative">
<span class="name"><?= e($component->title) ?></span>
<span class="description"><?= e($component->description) ?></span>
<span class="alias wn-icon-code"><?= e($component->alias) ?></span>
<input type="hidden" name="component_properties[]" data-inspector-values value="<?= e($component->propertyValues) ?>">
<input type="hidden" data-inspector-config value="<?= e($component->propertyConfig) ?>">
<input type="hidden" data-inspector-class value="<?= $component->className ?>">
<input type="hidden" data-component-icon value="<?= 'wn-'.e($component->pluginIcon) ?>">
<input type="hidden" data-component-default-alias value="<?= e($component->alias) ?>">
<input type="hidden" data-component-name value="<?= e($component->name) ?>">
<input type="hidden" name="component_names[]" value="">
<input type="hidden" name="component_aliases[]" value="">
<a href="#" class="remove">&times;</a>
</div>
</div>
<?php endforeach ?>
</div>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<div class="layout-absolute">
<div class="control-scrollbar" data-control="scrollbar">
<div
class="control-filelist component-list"
data-control="filelist"
data-group-status-handler="<?= $this->getEventHandler('onSetCollapseStatus') ?>"
id="<?= $this->getId('component-list') ?>">
<?= $this->makePartial('items', ['items'=>$data]) ?>
</div>
</div>
</div>

View File

@@ -0,0 +1,16 @@
<?php if ($items): ?>
<ul>
<?php foreach ($items as $item): ?>
<li class="group" data-status="<?= $this->getCollapseStatus($item->pluginClass, false) ? 'expanded' : 'collapsed' ?>" data-group-id="<?= e($item->pluginClass) ?>">
<div class="group">
<h4><a href="#"><?= e(trans($item->title)) ?></a></h4>
<i class="<?= e($item->icon) ?>"></i>
<span class="description"><?= e(trans($item->description)) ?></span>
</div>
<?= $this->makePartial('component_list', ['components'=>$item->items]) ?>
</li>
<?php endforeach ?>
</ul>
<?php else: ?>
<p class="no-data"><?= e(trans('cms::lang.component.no_records')) ?></p>
<?php endif ?>

View File

@@ -0,0 +1,16 @@
<div class="layout-row min-size">
<div class="control-toolbar toolbar-padded">
<!-- Component Search -->
<div class="relative toolbar-item loading-indicator-container size-input-text">
<input placeholder="<?= e(trans('cms::lang.sidebar.search')) ?>" type="text" name="search" value="<?= e($this->getSearchTerm()) ?>"
class="form-control icon search" autocomplete="off"
data-track-input
data-load-indicator
data-load-indicator-opaque
data-request="<?= $this->getEventHandler('onSearch') ?>"
/>
</div>
</div>
</div>