diff --git a/ui/vuetifyx/vuetifyxjs/src/lib/TiltedImages/VXTiltedImages.vue b/ui/vuetifyx/vuetifyxjs/src/lib/TiltedImages/VXTiltedImages.vue
new file mode 100644
index 00000000..d4edca6e
--- /dev/null
+++ b/ui/vuetifyx/vuetifyxjs/src/lib/TiltedImages/VXTiltedImages.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
diff --git a/ui/vuetifyx/vuetifyxjs/src/lib/Timeline/VXTimeline.vue b/ui/vuetifyx/vuetifyxjs/src/lib/Timeline/VXTimeline.vue
new file mode 100644
index 00000000..27da6eba
--- /dev/null
+++ b/ui/vuetifyx/vuetifyxjs/src/lib/Timeline/VXTimeline.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/vuetifyx/vuetifyxjs/src/lib/VXImageGallery.vue b/ui/vuetifyx/vuetifyxjs/src/lib/VXImageGallery.vue
new file mode 100644
index 00000000..44173ff5
--- /dev/null
+++ b/ui/vuetifyx/vuetifyxjs/src/lib/VXImageGallery.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/vuetifyx/vuetifyxjs/src/lib/VXVideo.vue b/ui/vuetifyx/vuetifyxjs/src/lib/VXVideo.vue
new file mode 100644
index 00000000..ab99edaa
--- /dev/null
+++ b/ui/vuetifyx/vuetifyxjs/src/lib/VXVideo.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
diff --git a/ui/vuetifyx/vuetifyxjs/src/lib/plugins/index.ts b/ui/vuetifyx/vuetifyxjs/src/lib/plugins/index.ts
index 20f2c053..b9419a81 100644
--- a/ui/vuetifyx/vuetifyxjs/src/lib/plugins/index.ts
+++ b/ui/vuetifyx/vuetifyxjs/src/lib/plugins/index.ts
@@ -44,6 +44,10 @@ import LinkageSelectRemote from '@/lib/LinkageSelectRemote/index.vue'
import VXSegmentForm from '@/lib/Form/VXSegmentForm/index.vue'
import VXModelProxy from '@/lib/VXModelProxy.vue'
import VXChart from '@/lib/Chart/VXChart.vue'
+import VXTimeline from '@/lib/Timeline/VXTimeline.vue'
+import VXTiltedImages from '@/lib/TiltedImages/VXTiltedImages.vue'
+import VXImageGallery from '@/lib/VXImageGallery.vue'
+import VXVideo from '@/lib/VXVideo.vue'
declare const window: any
@@ -85,6 +89,10 @@ const vuetifyx = {
app.component('vx-segment-form', VXSegmentForm)
app.component('vx-iframe-emitter', VXIframeEmitter)
app.component('vx-model-proxy', VXModelProxy)
+ app.component('vx-timeline', VXTimeline)
+ app.component('vx-tilted-images', VXTiltedImages)
+ app.component('vx-image-gallery', VXImageGallery)
+ app.component('vx-video', VXVideo)
}
}
diff --git a/ui/vuetifyx/vx-image-gallery.go b/ui/vuetifyx/vx-image-gallery.go
new file mode 100644
index 00000000..42b9b907
--- /dev/null
+++ b/ui/vuetifyx/vx-image-gallery.go
@@ -0,0 +1,47 @@
+package vuetifyx
+
+import (
+ "context"
+
+ h "github.com/theplant/htmlgo"
+)
+
+type VXImageGalleryBuilder struct {
+ tag *h.HTMLTagBuilder
+}
+
+func VXImageGallery() (r *VXImageGalleryBuilder) {
+ r = &VXImageGalleryBuilder{
+ tag: h.Tag("vx-image-gallery"),
+ }
+ return
+}
+
+func (b *VXImageGalleryBuilder) Items(v interface{}) (r *VXImageGalleryBuilder) {
+ b.tag.Attr(":items", v)
+ return b
+}
+
+func (b *VXImageGalleryBuilder) Height(v interface{}) (r *VXImageGalleryBuilder) {
+ b.tag.Attr(":height", v)
+ return b
+}
+
+func (b *VXImageGalleryBuilder) Width(v interface{}) (r *VXImageGalleryBuilder) {
+ b.tag.Attr(":width", v)
+ return b
+}
+
+func (b *VXImageGalleryBuilder) Attr(vs ...interface{}) (r *VXImageGalleryBuilder) {
+ b.tag.Attr(vs...)
+ return b
+}
+
+func (b *VXImageGalleryBuilder) Class(names ...string) (r *VXImageGalleryBuilder) {
+ b.tag.Class(names...)
+ return b
+}
+
+func (b *VXImageGalleryBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
+ return b.tag.MarshalHTML(ctx)
+}
diff --git a/ui/vuetifyx/vx-tilted-images.go b/ui/vuetifyx/vx-tilted-images.go
new file mode 100644
index 00000000..8df9740f
--- /dev/null
+++ b/ui/vuetifyx/vx-tilted-images.go
@@ -0,0 +1,73 @@
+package vuetifyx
+
+import (
+ "context"
+ "fmt"
+
+ h "github.com/theplant/htmlgo"
+)
+
+type VXTiltedImagesBuilder struct {
+ tag *h.HTMLTagBuilder
+}
+
+func VXTiltedImages(children ...h.HTMLComponent) (r *VXTiltedImagesBuilder) {
+ r = &VXTiltedImagesBuilder{
+ tag: h.Tag("vx-tilted-images").Children(children...),
+ }
+ return
+}
+
+func (b *VXTiltedImagesBuilder) InitialRotateX(v float64) (r *VXTiltedImagesBuilder) {
+ b.tag.Attr(":initial-rotate-x", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) InitialRotateY(v float64) (r *VXTiltedImagesBuilder) {
+ b.tag.Attr(":initial-rotate-y", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) InitialTranslateX(v float64) (r *VXTiltedImagesBuilder) {
+ b.tag.Attr(":initial-translate-x", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) InitialTranslateY(v float64) (r *VXTiltedImagesBuilder) {
+ b.tag.Attr(":initial-translate-y", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) Attr(vs ...interface{}) (r *VXTiltedImagesBuilder) {
+ b.tag.Attr(vs...)
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) Class(names ...string) (r *VXTiltedImagesBuilder) {
+ b.tag.Class(names...)
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) Style(v string) (r *VXTiltedImagesBuilder) {
+ b.tag.Style(v)
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) Children(children ...h.HTMLComponent) (r *VXTiltedImagesBuilder) {
+ b.tag.Children(children...)
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) AppendChildren(children ...h.HTMLComponent) (r *VXTiltedImagesBuilder) {
+ b.tag.AppendChildren(children...)
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) PrependChildren(children ...h.HTMLComponent) (r *VXTiltedImagesBuilder) {
+ b.tag.PrependChildren(children...)
+ return b
+}
+
+func (b *VXTiltedImagesBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
+ return b.tag.MarshalHTML(ctx)
+}
diff --git a/ui/vuetifyx/vx-timeline.go b/ui/vuetifyx/vx-timeline.go
new file mode 100644
index 00000000..7237285b
--- /dev/null
+++ b/ui/vuetifyx/vx-timeline.go
@@ -0,0 +1,162 @@
+package vuetifyx
+
+import (
+ "context"
+ "fmt"
+
+ h "github.com/theplant/htmlgo"
+)
+
+type VXTimelineBuilder struct {
+ tag *h.HTMLTagBuilder
+}
+
+func VXTimeline(children ...h.HTMLComponent) (r *VXTimelineBuilder) {
+ r = &VXTimelineBuilder{
+ tag: h.Tag("vx-timeline").Children(children...),
+ }
+ return
+}
+
+func (b *VXTimelineBuilder) Justify(v string) (r *VXTimelineBuilder) {
+ b.tag.Attr("justify", v)
+ return b
+}
+
+func (b *VXTimelineBuilder) LineThickness(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":line-thickness", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) LineColor(v string) (r *VXTimelineBuilder) {
+ b.tag.Attr("line-color", v)
+ return b
+}
+
+func (b *VXTimelineBuilder) DotColor(v string) (r *VXTimelineBuilder) {
+ b.tag.Attr("dot-color", v)
+ return b
+}
+
+func (b *VXTimelineBuilder) FillDot(v bool) (r *VXTimelineBuilder) {
+ b.tag.Attr(":fill-dot", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) HideOpposite(v bool) (r *VXTimelineBuilder) {
+ b.tag.Attr(":hide-opposite", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) AnimateOnScroll(v bool) (r *VXTimelineBuilder) {
+ b.tag.Attr(":animate-on-scroll", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) Parallax(v bool) (r *VXTimelineBuilder) {
+ b.tag.Attr(":parallax", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) IconColor(v string) (r *VXTimelineBuilder) {
+ b.tag.Attr("icon-color", v)
+ return b
+}
+
+func (b *VXTimelineBuilder) LineInset(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":line-inset", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) Size(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":size", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) Tag(v string) (r *VXTimelineBuilder) {
+ b.tag.Attr("tag", v)
+ return b
+}
+
+func (b *VXTimelineBuilder) Density(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":density", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) Theme(v string) (r *VXTimelineBuilder) {
+ b.tag.Attr("theme", v)
+ return b
+}
+
+func (b *VXTimelineBuilder) Align(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":align", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) Direction(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":direction", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) Side(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":side", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) TruncateLine(v interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(":truncate-line", h.JSONString(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) SetAttr(k string, v interface{}) {
+ b.tag.SetAttr(k, v)
+}
+
+func (b *VXTimelineBuilder) Attr(vs ...interface{}) (r *VXTimelineBuilder) {
+ b.tag.Attr(vs...)
+ return b
+}
+
+func (b *VXTimelineBuilder) Children(children ...h.HTMLComponent) (r *VXTimelineBuilder) {
+ b.tag.Children(children...)
+ return b
+}
+
+func (b *VXTimelineBuilder) AppendChildren(children ...h.HTMLComponent) (r *VXTimelineBuilder) {
+ b.tag.AppendChildren(children...)
+ return b
+}
+
+func (b *VXTimelineBuilder) PrependChildren(children ...h.HTMLComponent) (r *VXTimelineBuilder) {
+ b.tag.PrependChildren(children...)
+ return b
+}
+
+func (b *VXTimelineBuilder) Class(names ...string) (r *VXTimelineBuilder) {
+ b.tag.Class(names...)
+ return b
+}
+
+func (b *VXTimelineBuilder) ClassIf(name string, add bool) (r *VXTimelineBuilder) {
+ b.tag.ClassIf(name, add)
+ return b
+}
+
+func (b *VXTimelineBuilder) Sinuous(v bool) (r *VXTimelineBuilder) {
+ b.tag.Attr(":sinuous", fmt.Sprint(v))
+ return b
+}
+
+func (b *VXTimelineBuilder) On(name string, value string) (r *VXTimelineBuilder) {
+ b.tag.Attr(fmt.Sprintf("v-on:%s", name), value)
+ return b
+}
+
+func (b *VXTimelineBuilder) Bind(name string, value string) (r *VXTimelineBuilder) {
+ b.tag.Attr(fmt.Sprintf("v-bind:%s", name), value)
+ return b
+}
+
+func (b *VXTimelineBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
+ return b.tag.MarshalHTML(ctx)
+}
diff --git a/ui/vuetifyx/vx-video.go b/ui/vuetifyx/vx-video.go
new file mode 100644
index 00000000..8b677810
--- /dev/null
+++ b/ui/vuetifyx/vx-video.go
@@ -0,0 +1,62 @@
+package vuetifyx
+
+import (
+ "context"
+
+ h "github.com/theplant/htmlgo"
+)
+
+type VXVideoBuilder struct {
+ tag *h.HTMLTagBuilder
+}
+
+func VXVideo() (r *VXVideoBuilder) {
+ r = &VXVideoBuilder{
+ tag: h.Tag("vx-video"),
+ }
+ return
+}
+
+func (b *VXVideoBuilder) Src(v string) (r *VXVideoBuilder) {
+ b.tag.Attr("src", v)
+ return b
+}
+
+func (b *VXVideoBuilder) Poster(v string) (r *VXVideoBuilder) {
+ b.tag.Attr("poster", v)
+ return b
+}
+
+func (b *VXVideoBuilder) Width(v string) (r *VXVideoBuilder) {
+ b.tag.Attr("width", v)
+ return b
+}
+
+func (b *VXVideoBuilder) Height(v string) (r *VXVideoBuilder) {
+ b.tag.Attr("height", v)
+ return b
+}
+
+func (b *VXVideoBuilder) Rounded(v string) (r *VXVideoBuilder) {
+ b.tag.Attr("rounded", v)
+ return b
+}
+
+func (b *VXVideoBuilder) Class(names ...string) (r *VXVideoBuilder) {
+ b.tag.Class(names...)
+ return b
+}
+
+func (b *VXVideoBuilder) ClassIf(name string, add bool) (r *VXVideoBuilder) {
+ b.tag.ClassIf(name, add)
+ return b
+}
+
+func (b *VXVideoBuilder) Attr(vs ...interface{}) (r *VXVideoBuilder) {
+ b.tag.Attr(vs...)
+ return b
+}
+
+func (b *VXVideoBuilder) MarshalHTML(ctx context.Context) (r []byte, err error) {
+ return b.tag.MarshalHTML(ctx)
+}