diff --git a/404.html b/404.html
index bebb62d..7027053 100644
--- a/404.html
+++ b/404.html
@@ -1,6 +1,6 @@
Error 404 - NoLogWeb
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/daygrid-views.html b/kalendar-novy/examples/daygrid-views.html
new file mode 100644
index 0000000..9dafe43
--- /dev/null
+++ b/kalendar-novy/examples/daygrid-views.html
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/external-dragging-2cals.html b/kalendar-novy/examples/external-dragging-2cals.html
new file mode 100644
index 0000000..066685d
--- /dev/null
+++ b/kalendar-novy/examples/external-dragging-2cals.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/external-dragging-builtin.html b/kalendar-novy/examples/external-dragging-builtin.html
new file mode 100644
index 0000000..78fcd89
--- /dev/null
+++ b/kalendar-novy/examples/external-dragging-builtin.html
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Draggable Events
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/full-height.html b/kalendar-novy/examples/full-height.html
new file mode 100644
index 0000000..18b55f8
--- /dev/null
+++ b/kalendar-novy/examples/full-height.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/list-sticky-header.html b/kalendar-novy/examples/list-sticky-header.html
new file mode 100644
index 0000000..487af31
--- /dev/null
+++ b/kalendar-novy/examples/list-sticky-header.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/list-views.html b/kalendar-novy/examples/list-views.html
new file mode 100644
index 0000000..cb219d0
--- /dev/null
+++ b/kalendar-novy/examples/list-views.html
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/month-view.html b/kalendar-novy/examples/month-view.html
new file mode 100644
index 0000000..dbd8861
--- /dev/null
+++ b/kalendar-novy/examples/month-view.html
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/multimonth-view.html b/kalendar-novy/examples/multimonth-view.html
new file mode 100644
index 0000000..feb9d23
--- /dev/null
+++ b/kalendar-novy/examples/multimonth-view.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/multiweek-view.html b/kalendar-novy/examples/multiweek-view.html
new file mode 100644
index 0000000..5a175fb
--- /dev/null
+++ b/kalendar-novy/examples/multiweek-view.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/natural-height.html b/kalendar-novy/examples/natural-height.html
new file mode 100644
index 0000000..b62c41d
--- /dev/null
+++ b/kalendar-novy/examples/natural-height.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/selectable.html b/kalendar-novy/examples/selectable.html
new file mode 100644
index 0000000..785e90e
--- /dev/null
+++ b/kalendar-novy/examples/selectable.html
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/examples/timegrid-views.html b/kalendar-novy/examples/timegrid-views.html
new file mode 100644
index 0000000..9cd2527
--- /dev/null
+++ b/kalendar-novy/examples/timegrid-views.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kalendar-novy/packages/bootstrap4/index.global.js b/kalendar-novy/packages/bootstrap4/index.global.js
new file mode 100644
index 0000000..a0fbba8
--- /dev/null
+++ b/kalendar-novy/packages/bootstrap4/index.global.js
@@ -0,0 +1,64 @@
+/*!
+FullCalendar Bootstrap 4 Plugin v6.1.9
+Docs & License: https://fullcalendar.io/docs/bootstrap4
+(c) 2023 Adam Shaw
+*/
+FullCalendar.Bootstrap = (function (exports, core, internal$1) {
+ 'use strict';
+
+ class BootstrapTheme extends internal$1.Theme {
+ }
+ BootstrapTheme.prototype.classes = {
+ root: 'fc-theme-bootstrap',
+ table: 'table-bordered',
+ tableCellShaded: 'table-active',
+ buttonGroup: 'btn-group',
+ button: 'btn btn-primary',
+ buttonActive: 'active',
+ popover: 'popover',
+ popoverHeader: 'popover-header',
+ popoverContent: 'popover-body',
+ };
+ BootstrapTheme.prototype.baseIconClass = 'fa';
+ BootstrapTheme.prototype.iconClasses = {
+ close: 'fa-times',
+ prev: 'fa-chevron-left',
+ next: 'fa-chevron-right',
+ prevYear: 'fa-angle-double-left',
+ nextYear: 'fa-angle-double-right',
+ };
+ BootstrapTheme.prototype.rtlIconClasses = {
+ prev: 'fa-chevron-right',
+ next: 'fa-chevron-left',
+ prevYear: 'fa-angle-double-right',
+ nextYear: 'fa-angle-double-left',
+ };
+ BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome'; // TODO: make TS-friendly. move the option-processing into this plugin
+ BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
+ BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
+
+ var css_248z = ".fc-theme-bootstrap a:not([href]){color:inherit}.fc-theme-bootstrap .fc-more-link:hover{text-decoration:none}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/bootstrap',
+ themeClasses: {
+ bootstrap: BootstrapTheme,
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ BootstrapTheme: BootstrapTheme
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal);
diff --git a/kalendar-novy/packages/bootstrap4/index.global.min.js b/kalendar-novy/packages/bootstrap4/index.global.min.js
new file mode 100644
index 0000000..835aa2c
--- /dev/null
+++ b/kalendar-novy/packages/bootstrap4/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Bootstrap 4 Plugin v6.1.9
+Docs & License: https://fullcalendar.io/docs/bootstrap4
+(c) 2023 Adam Shaw
+*/
+FullCalendar.Bootstrap=function(e,t,o){"use strict";class r extends o.Theme{}r.prototype.classes={root:"fc-theme-bootstrap",table:"table-bordered",tableCellShaded:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",popover:"popover",popoverHeader:"popover-header",popoverContent:"popover-body"},r.prototype.baseIconClass="fa",r.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},r.prototype.rtlIconClasses={prev:"fa-chevron-right",next:"fa-chevron-left",prevYear:"fa-angle-double-right",nextYear:"fa-angle-double-left"},r.prototype.iconOverrideOption="bootstrapFontAwesome",r.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",r.prototype.iconOverridePrefix="fa-";o.injectStyles(".fc-theme-bootstrap a:not([href]){color:inherit}.fc-theme-bootstrap .fc-more-link:hover{text-decoration:none}");var a=t.createPlugin({name:"@fullcalendar/bootstrap",themeClasses:{bootstrap:r}}),n={__proto__:null,BootstrapTheme:r};return t.globalPlugins.push(a),e.Internal=n,e.default=a,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal);
\ No newline at end of file
diff --git a/kalendar-novy/packages/bootstrap5/index.global.js b/kalendar-novy/packages/bootstrap5/index.global.js
new file mode 100644
index 0000000..163df22
--- /dev/null
+++ b/kalendar-novy/packages/bootstrap5/index.global.js
@@ -0,0 +1,64 @@
+/*!
+FullCalendar Bootstrap 5 Plugin v6.1.9
+Docs & License: https://fullcalendar.io/docs/bootstrap5
+(c) 2023 Adam Shaw
+*/
+FullCalendar.Bootstrap5 = (function (exports, core, internal$1) {
+ 'use strict';
+
+ class BootstrapTheme extends internal$1.Theme {
+ }
+ BootstrapTheme.prototype.classes = {
+ root: 'fc-theme-bootstrap5',
+ tableCellShaded: 'fc-theme-bootstrap5-shaded',
+ buttonGroup: 'btn-group',
+ button: 'btn btn-primary',
+ buttonActive: 'active',
+ popover: 'popover',
+ popoverHeader: 'popover-header',
+ popoverContent: 'popover-body',
+ };
+ BootstrapTheme.prototype.baseIconClass = 'bi';
+ BootstrapTheme.prototype.iconClasses = {
+ close: 'bi-x-lg',
+ prev: 'bi-chevron-left',
+ next: 'bi-chevron-right',
+ prevYear: 'bi-chevron-double-left',
+ nextYear: 'bi-chevron-double-right',
+ };
+ BootstrapTheme.prototype.rtlIconClasses = {
+ prev: 'bi-chevron-right',
+ next: 'bi-chevron-left',
+ prevYear: 'bi-chevron-double-right',
+ nextYear: 'bi-chevron-double-left',
+ };
+ // wtf
+ BootstrapTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly
+ BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'icon';
+ BootstrapTheme.prototype.iconOverridePrefix = 'bi-';
+
+ var css_248z = ".fc-theme-bootstrap5 a:not([href]){color:inherit;text-decoration:inherit}.fc-theme-bootstrap5 .fc-list,.fc-theme-bootstrap5 .fc-scrollgrid,.fc-theme-bootstrap5 td,.fc-theme-bootstrap5 th{border:1px solid var(--bs-gray-400)}.fc-theme-bootstrap5 .fc-scrollgrid{border-bottom-width:0;border-right-width:0}.fc-theme-bootstrap5-shaded{background-color:var(--bs-gray-200)}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/bootstrap5',
+ themeClasses: {
+ bootstrap5: BootstrapTheme,
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ BootstrapTheme: BootstrapTheme
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal);
diff --git a/kalendar-novy/packages/bootstrap5/index.global.min.js b/kalendar-novy/packages/bootstrap5/index.global.min.js
new file mode 100644
index 0000000..4c0a3b5
--- /dev/null
+++ b/kalendar-novy/packages/bootstrap5/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Bootstrap 5 Plugin v6.1.9
+Docs & License: https://fullcalendar.io/docs/bootstrap5
+(c) 2023 Adam Shaw
+*/
+FullCalendar.Bootstrap5=function(e,t,o){"use strict";class r extends o.Theme{}r.prototype.classes={root:"fc-theme-bootstrap5",tableCellShaded:"fc-theme-bootstrap5-shaded",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",popover:"popover",popoverHeader:"popover-header",popoverContent:"popover-body"},r.prototype.baseIconClass="bi",r.prototype.iconClasses={close:"bi-x-lg",prev:"bi-chevron-left",next:"bi-chevron-right",prevYear:"bi-chevron-double-left",nextYear:"bi-chevron-double-right"},r.prototype.rtlIconClasses={prev:"bi-chevron-right",next:"bi-chevron-left",prevYear:"bi-chevron-double-right",nextYear:"bi-chevron-double-left"},r.prototype.iconOverrideOption="buttonIcons",r.prototype.iconOverrideCustomButtonOption="icon",r.prototype.iconOverridePrefix="bi-";o.injectStyles(".fc-theme-bootstrap5 a:not([href]){color:inherit;text-decoration:inherit}.fc-theme-bootstrap5 .fc-list,.fc-theme-bootstrap5 .fc-scrollgrid,.fc-theme-bootstrap5 td,.fc-theme-bootstrap5 th{border:1px solid var(--bs-gray-400)}.fc-theme-bootstrap5 .fc-scrollgrid{border-bottom-width:0;border-right-width:0}.fc-theme-bootstrap5-shaded{background-color:var(--bs-gray-200)}");var a=t.createPlugin({name:"@fullcalendar/bootstrap5",themeClasses:{bootstrap5:r}}),n={__proto__:null,BootstrapTheme:r};return t.globalPlugins.push(a),e.Internal=n,e.default=a,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal);
\ No newline at end of file
diff --git a/kalendar-novy/packages/core/index.global.js b/kalendar-novy/packages/core/index.global.js
new file mode 100644
index 0000000..74d1352
--- /dev/null
+++ b/kalendar-novy/packages/core/index.global.js
@@ -0,0 +1,9840 @@
+/*!
+FullCalendar Core v6.1.9
+Docs & License: https://fullcalendar.io
+(c) 2023 Adam Shaw
+*/
+var FullCalendar = (function (exports) {
+ 'use strict';
+
+ const styleTexts = [];
+ const styleEls = new Map();
+ function injectStyles(styleText) {
+ styleTexts.push(styleText);
+ styleEls.forEach((styleEl) => {
+ appendStylesTo(styleEl, styleText);
+ });
+ }
+ function ensureElHasStyles(el) {
+ if (el.isConnected) {
+ registerStylesRoot(el.getRootNode());
+ }
+ }
+ function registerStylesRoot(rootNode) {
+ let styleEl = styleEls.get(rootNode);
+ if (!styleEl || !styleEl.isConnected) {
+ styleEl = rootNode.querySelector('style[data-fullcalendar]');
+ if (!styleEl) {
+ styleEl = document.createElement('style');
+ styleEl.setAttribute('data-fullcalendar', '');
+ const nonce = getNonceValue();
+ if (nonce) {
+ styleEl.nonce = nonce;
+ }
+ const parentEl = rootNode === document ? document.head : rootNode;
+ const insertBefore = rootNode === document
+ ? parentEl.querySelector('script,link[rel=stylesheet],link[as=style],style')
+ : parentEl.firstChild;
+ parentEl.insertBefore(styleEl, insertBefore);
+ }
+ styleEls.set(rootNode, styleEl);
+ hydrateStylesRoot(styleEl);
+ }
+ }
+ function hydrateStylesRoot(styleEl) {
+ for (const styleText of styleTexts) {
+ appendStylesTo(styleEl, styleText);
+ }
+ }
+ function appendStylesTo(styleEl, styleText) {
+ const { sheet } = styleEl;
+ const ruleCnt = sheet.cssRules.length;
+ styleText.split('}').forEach((styleStr, i) => {
+ styleStr = styleStr.trim();
+ if (styleStr) {
+ sheet.insertRule(styleStr + '}', ruleCnt + i);
+ }
+ });
+ }
+ // nonce
+ // -------------------------------------------------------------------------------------------------
+ let queriedNonceValue;
+ function getNonceValue() {
+ if (queriedNonceValue === undefined) {
+ queriedNonceValue = queryNonceValue();
+ }
+ return queriedNonceValue;
+ }
+ /*
+ TODO: discourage meta tag and instead put nonce attribute on placeholder