@unabridged/midwest 0.19.1 → 0.19.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/assets/javascript/midwest/index.ts +2 -0
- package/app/assets/javascript/midwest.js +68 -0
- package/app/assets/javascript/midwest.js.map +1 -1
- package/app/assets/stylesheets/midwest.css +1 -1
- package/dist/css/midwest.css +1 -1
- package/dist/javascript/collection/app/assets/javascript/midwest/index.js +2 -0
- package/dist/javascript/collection/app/assets/javascript/midwest/index.js.map +1 -1
- package/dist/javascript/collection/app/components/midwest/pagination_component/pagination_component_controller.js +52 -0
- package/dist/javascript/collection/app/components/midwest/pagination_component/pagination_component_controller.js.map +1 -0
- package/dist/javascript/collection/app/components/midwest/table_component/table_component_controller.js +19 -0
- package/dist/javascript/collection/app/components/midwest/table_component/table_component_controller.js.map +1 -1
- package/dist/javascript/midwest.js +68 -0
- package/dist/javascript/midwest.js.map +1 -1
- package/package.json +1 -1
|
@@ -24,6 +24,7 @@ import Notification from '../../../components/midwest/notification_component/not
|
|
|
24
24
|
import HorizontalScroll from '../../../components/midwest/horizontal_scroll_component/horizontal_scroll_component_controller.js';
|
|
25
25
|
import Table from '../../../components/midwest/table_component/table_component_controller.js';
|
|
26
26
|
import LoadMore from '../../../components/midwest/table_component/load_more_controller.js';
|
|
27
|
+
import Pagination from '../../../components/midwest/pagination_component/pagination_component_controller.js';
|
|
27
28
|
|
|
28
29
|
function registerMidwestControllers(application) {
|
|
29
30
|
application.register("midwest-card", Card);
|
|
@@ -52,6 +53,7 @@ function registerMidwestControllers(application) {
|
|
|
52
53
|
application.register("midwest-horizontal-scroll", HorizontalScroll);
|
|
53
54
|
application.register("midwest-table", Table);
|
|
54
55
|
application.register("midwest-load-more", LoadMore);
|
|
56
|
+
application.register("midwest-pagination", Pagination);
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
export { Banner, Card, Chart, CountdownTimer, registerMidwestControllers };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../../app/assets/javascript/midwest/index.ts"],"sourcesContent":["import Card from '../../../components/midwest/card_component/card_component_controller'\nimport Banner from '../../../components/midwest/banner_component/banner_component_controller'\nimport Input from '../../../components/midwest/form/input_component/input_component_controller'\nimport File from '../../../components/midwest/form/file_component/file_component_controller'\nimport Dropdown from '../../../components/midwest/dropdown_component/dropdown_component_controller'\nimport Prose from '../../../components/midwest/prose_component/prose_component_controller'\nimport Dialog from '../../../components/midwest/dialog_component/dialog_component_controller'\nimport Tabs from '../../../components/midwest/tabs_component/tabs_component_controller'\nimport Tooltip from '../../../components/midwest/tooltip_component/tooltip_component_controller'\nimport Carousel from '../../../components/midwest/carousel_component/carousel_component_controller'\nimport FormLiveSummary from '../../../components/midwest/form/live_summary_component/live_summary_component_controller'\nimport Form from '../../../components/midwest/form/form_controller'\nimport CountdownTimer from '../../../components/midwest/countdown_timer_component/countdown_timer_component_controller'\nimport Badge from '../../../components/midwest/badge_component/badge_component_controller'\nimport Confirmation from '../../../components/midwest/confirmation_component/confirmation_component_controller'\nimport AvatarGroup from '../../../components/midwest/avatar_group_component/avatar_group_component_controller'\nimport Chart from '../../../components/midwest/chart_component/chart_component_controller'\nimport Range from '../../../components/midwest/form/range_component/range_component_controller'\nimport Rating from '../../../components/midwest/rating_component/rating_component_controller'\nimport Autocomplete from '../../../components/midwest/form/autocomplete_component/autocomplete_component_controller'\nimport Image from '../../../components/midwest/image_component/image_component_controller'\nimport ColorPicker from '../../../components/midwest/form/color_picker_component/color_picker_component_controller'\nimport Notification from '../../../components/midwest/notification_component/notification_component_controller'\nimport HorizontalScroll from '../../../components/midwest/horizontal_scroll_component/horizontal_scroll_component_controller'\nimport Table from '../../../components/midwest/table_component/table_component_controller'\nimport LoadMore from '../../../components/midwest/table_component/load_more_controller'\n/* IMPORTS */\n\nexport { Card, Banner, CountdownTimer, Chart }\n\nexport function registerMidwestControllers (application: any) {\n application.register('midwest-card', Card)\n application.register('midwest-banner', Banner)\n application.register('midwest-countdown-timer', CountdownTimer)\n application.register('midwest-input', Input)\n application.register('midwest-file', File)\n application.register('midwest-dropdown', Dropdown)\n application.register('midwest-prose', Prose)\n application.register('midwest-dialog', Dialog)\n application.register('midwest-tabs', Tabs)\n application.register('midwest-tooltip', Tooltip)\n application.register('midwest-carousel', Carousel)\n application.register('midwest-form-live-summary', FormLiveSummary)\n application.register('midwest-form', Form)\n application.register('midwest-badge', Badge)\n application.register('midwest-confirmation', Confirmation)\n application.register('midwest-avatar-group', AvatarGroup)\n application.register('midwest-chart', Chart)\n application.register('midwest-range', Range)\n application.register('midwest-rating', Rating)\n application.register('midwest-autocomplete', Autocomplete)\n application.register('midwest-image', Image)\n application.register('midwest-color-picker', ColorPicker)\n application.register('midwest-notification', Notification)\n application.register('midwest-horizontal-scroll', HorizontalScroll)\n application.register('midwest-table', Table)\n application.register('midwest-load-more', LoadMore)\n /* EXPORTS */\n}\n"],"names":["Confirmation"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../../app/assets/javascript/midwest/index.ts"],"sourcesContent":["import Card from '../../../components/midwest/card_component/card_component_controller'\nimport Banner from '../../../components/midwest/banner_component/banner_component_controller'\nimport Input from '../../../components/midwest/form/input_component/input_component_controller'\nimport File from '../../../components/midwest/form/file_component/file_component_controller'\nimport Dropdown from '../../../components/midwest/dropdown_component/dropdown_component_controller'\nimport Prose from '../../../components/midwest/prose_component/prose_component_controller'\nimport Dialog from '../../../components/midwest/dialog_component/dialog_component_controller'\nimport Tabs from '../../../components/midwest/tabs_component/tabs_component_controller'\nimport Tooltip from '../../../components/midwest/tooltip_component/tooltip_component_controller'\nimport Carousel from '../../../components/midwest/carousel_component/carousel_component_controller'\nimport FormLiveSummary from '../../../components/midwest/form/live_summary_component/live_summary_component_controller'\nimport Form from '../../../components/midwest/form/form_controller'\nimport CountdownTimer from '../../../components/midwest/countdown_timer_component/countdown_timer_component_controller'\nimport Badge from '../../../components/midwest/badge_component/badge_component_controller'\nimport Confirmation from '../../../components/midwest/confirmation_component/confirmation_component_controller'\nimport AvatarGroup from '../../../components/midwest/avatar_group_component/avatar_group_component_controller'\nimport Chart from '../../../components/midwest/chart_component/chart_component_controller'\nimport Range from '../../../components/midwest/form/range_component/range_component_controller'\nimport Rating from '../../../components/midwest/rating_component/rating_component_controller'\nimport Autocomplete from '../../../components/midwest/form/autocomplete_component/autocomplete_component_controller'\nimport Image from '../../../components/midwest/image_component/image_component_controller'\nimport ColorPicker from '../../../components/midwest/form/color_picker_component/color_picker_component_controller'\nimport Notification from '../../../components/midwest/notification_component/notification_component_controller'\nimport HorizontalScroll from '../../../components/midwest/horizontal_scroll_component/horizontal_scroll_component_controller'\nimport Table from '../../../components/midwest/table_component/table_component_controller'\nimport LoadMore from '../../../components/midwest/table_component/load_more_controller'\nimport Pagination from '../../../components/midwest/pagination_component/pagination_component_controller'\n/* IMPORTS */\n\nexport { Card, Banner, CountdownTimer, Chart }\n\nexport function registerMidwestControllers (application: any) {\n application.register('midwest-card', Card)\n application.register('midwest-banner', Banner)\n application.register('midwest-countdown-timer', CountdownTimer)\n application.register('midwest-input', Input)\n application.register('midwest-file', File)\n application.register('midwest-dropdown', Dropdown)\n application.register('midwest-prose', Prose)\n application.register('midwest-dialog', Dialog)\n application.register('midwest-tabs', Tabs)\n application.register('midwest-tooltip', Tooltip)\n application.register('midwest-carousel', Carousel)\n application.register('midwest-form-live-summary', FormLiveSummary)\n application.register('midwest-form', Form)\n application.register('midwest-badge', Badge)\n application.register('midwest-confirmation', Confirmation)\n application.register('midwest-avatar-group', AvatarGroup)\n application.register('midwest-chart', Chart)\n application.register('midwest-range', Range)\n application.register('midwest-rating', Rating)\n application.register('midwest-autocomplete', Autocomplete)\n application.register('midwest-image', Image)\n application.register('midwest-color-picker', ColorPicker)\n application.register('midwest-notification', Notification)\n application.register('midwest-horizontal-scroll', HorizontalScroll)\n application.register('midwest-table', Table)\n application.register('midwest-load-more', LoadMore)\n application.register('midwest-pagination', Pagination)\n /* EXPORTS */\n}\n"],"names":["Confirmation"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BO,SAAS,2BAA4B,WAAkB,EAAA;AAC5D,EAAY,WAAA,CAAA,QAAA,CAAS,gBAAgB,IAAI,CAAA,CAAA;AACzC,EAAY,WAAA,CAAA,QAAA,CAAS,kBAAkB,MAAM,CAAA,CAAA;AAC7C,EAAY,WAAA,CAAA,QAAA,CAAS,2BAA2B,cAAc,CAAA,CAAA;AAC9D,EAAY,WAAA,CAAA,QAAA,CAAS,iBAAiB,KAAK,CAAA,CAAA;AAC3C,EAAY,WAAA,CAAA,QAAA,CAAS,gBAAgB,IAAI,CAAA,CAAA;AACzC,EAAY,WAAA,CAAA,QAAA,CAAS,oBAAoB,QAAQ,CAAA,CAAA;AACjD,EAAY,WAAA,CAAA,QAAA,CAAS,iBAAiB,KAAK,CAAA,CAAA;AAC3C,EAAY,WAAA,CAAA,QAAA,CAAS,kBAAkB,MAAM,CAAA,CAAA;AAC7C,EAAY,WAAA,CAAA,QAAA,CAAS,gBAAgB,IAAI,CAAA,CAAA;AACzC,EAAY,WAAA,CAAA,QAAA,CAAS,mBAAmB,OAAO,CAAA,CAAA;AAC/C,EAAY,WAAA,CAAA,QAAA,CAAS,oBAAoB,QAAQ,CAAA,CAAA;AACjD,EAAY,WAAA,CAAA,QAAA,CAAS,6BAA6B,eAAe,CAAA,CAAA;AACjE,EAAY,WAAA,CAAA,QAAA,CAAS,gBAAgB,IAAI,CAAA,CAAA;AACzC,EAAY,WAAA,CAAA,QAAA,CAAS,iBAAiB,KAAK,CAAA,CAAA;AAC3C,EAAY,WAAA,CAAA,QAAA,CAAS,wBAAwBA,sBAAY,CAAA,CAAA;AACzD,EAAY,WAAA,CAAA,QAAA,CAAS,wBAAwB,WAAW,CAAA,CAAA;AACxD,EAAY,WAAA,CAAA,QAAA,CAAS,iBAAiB,KAAK,CAAA,CAAA;AAC3C,EAAY,WAAA,CAAA,QAAA,CAAS,iBAAiB,KAAK,CAAA,CAAA;AAC3C,EAAY,WAAA,CAAA,QAAA,CAAS,kBAAkB,MAAM,CAAA,CAAA;AAC7C,EAAY,WAAA,CAAA,QAAA,CAAS,wBAAwB,YAAY,CAAA,CAAA;AACzD,EAAY,WAAA,CAAA,QAAA,CAAS,iBAAiB,KAAK,CAAA,CAAA;AAC3C,EAAY,WAAA,CAAA,QAAA,CAAS,wBAAwB,WAAW,CAAA,CAAA;AACxD,EAAY,WAAA,CAAA,QAAA,CAAS,wBAAwB,YAAY,CAAA,CAAA;AACzD,EAAY,WAAA,CAAA,QAAA,CAAS,6BAA6B,gBAAgB,CAAA,CAAA;AAClE,EAAY,WAAA,CAAA,QAAA,CAAS,iBAAiB,KAAK,CAAA,CAAA;AAC3C,EAAY,WAAA,CAAA,QAAA,CAAS,qBAAqB,QAAQ,CAAA,CAAA;AAClD,EAAY,WAAA,CAAA,QAAA,CAAS,sBAAsB,UAAU,CAAA,CAAA;AAEvD;;;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Controller } from '@hotwired/stimulus';
|
|
2
|
+
|
|
3
|
+
class Pagination extends Controller {
|
|
4
|
+
static targets = ["jumpInput"];
|
|
5
|
+
static values = { urlTemplate: String, turboFrameId: String };
|
|
6
|
+
debounceTimer = null;
|
|
7
|
+
// Intercepts the jump-to-page form submit and navigates to the resolved URL.
|
|
8
|
+
jump(event) {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
if (!this.hasJumpInputTarget)
|
|
11
|
+
return;
|
|
12
|
+
const page = parseInt(this.jumpInputTarget.value, 10);
|
|
13
|
+
if (!isNaN(page) && page >= 1) {
|
|
14
|
+
this.visitUrl(this.urlTemplateValue.replace("__PAGE__", String(page)));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Debounced handler for the `incremental` input — navigates 400 ms after the
|
|
18
|
+
// user stops typing, and only when the value is within the valid page range.
|
|
19
|
+
jumpIncremental() {
|
|
20
|
+
if (this.debounceTimer)
|
|
21
|
+
clearTimeout(this.debounceTimer);
|
|
22
|
+
this.debounceTimer = setTimeout(() => {
|
|
23
|
+
if (!this.hasJumpInputTarget)
|
|
24
|
+
return;
|
|
25
|
+
const input = this.jumpInputTarget;
|
|
26
|
+
const page = parseInt(input.value, 10);
|
|
27
|
+
const max = parseInt(input.max, 10);
|
|
28
|
+
if (!isNaN(page) && page >= 1 && (!max || page <= max)) {
|
|
29
|
+
this.visitUrl(this.urlTemplateValue.replace("__PAGE__", String(page)));
|
|
30
|
+
}
|
|
31
|
+
}, 400);
|
|
32
|
+
}
|
|
33
|
+
// Navigates to the URL selected in the per-page <select> element.
|
|
34
|
+
navigate(event) {
|
|
35
|
+
const select = event.target;
|
|
36
|
+
const href = select.value;
|
|
37
|
+
if (href && href !== "#") {
|
|
38
|
+
this.visitUrl(href);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Navigates to a URL via Turbo visit, updating the browser URL.
|
|
42
|
+
visitUrl(url) {
|
|
43
|
+
if (window.Turbo) {
|
|
44
|
+
window.Turbo.visit(url);
|
|
45
|
+
} else {
|
|
46
|
+
window.location.href = url;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { Pagination as default };
|
|
52
|
+
//# sourceMappingURL=pagination_component_controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination_component_controller.js","sources":["../../../../../../../app/components/midwest/pagination_component/pagination_component_controller.ts"],"sourcesContent":["import { Controller } from '@hotwired/stimulus'\n\nexport default class Pagination extends Controller {\n static targets = ['jumpInput']\n static values = { urlTemplate: String, turboFrameId: String }\n\n declare readonly jumpInputTarget: HTMLInputElement\n declare readonly hasJumpInputTarget: boolean\n declare urlTemplateValue: string\n declare turboFrameIdValue: string\n\n private debounceTimer: ReturnType<typeof setTimeout> | null = null\n\n // Intercepts the jump-to-page form submit and navigates to the resolved URL.\n jump (event: Event) {\n event.preventDefault()\n if (!this.hasJumpInputTarget) return\n const page = parseInt(this.jumpInputTarget.value, 10)\n if (!isNaN(page) && page >= 1) {\n this.visitUrl(this.urlTemplateValue.replace('__PAGE__', String(page)))\n }\n }\n\n // Debounced handler for the `incremental` input — navigates 400 ms after the\n // user stops typing, and only when the value is within the valid page range.\n jumpIncremental () {\n if (this.debounceTimer) clearTimeout(this.debounceTimer)\n this.debounceTimer = setTimeout(() => {\n if (!this.hasJumpInputTarget) return\n const input = this.jumpInputTarget\n const page = parseInt(input.value, 10)\n const max = parseInt(input.max, 10)\n if (!isNaN(page) && page >= 1 && (!max || page <= max)) {\n this.visitUrl(this.urlTemplateValue.replace('__PAGE__', String(page)))\n }\n }, 400)\n }\n\n // Navigates to the URL selected in the per-page <select> element.\n navigate (event: Event) {\n const select = event.target as HTMLSelectElement\n const href = select.value\n if (href && href !== '#') {\n this.visitUrl(href)\n }\n }\n\n // Navigates to a URL via Turbo visit, updating the browser URL.\n private visitUrl (url: string) {\n if ((window as any).Turbo) {\n (window as any).Turbo.visit(url)\n } else {\n window.location.href = url\n }\n }\n}\n"],"names":[],"mappings":";;AAEA,MAAqB,mBAAmB,UAAW,CAAA;AAAA,EACjD,OAAO,OAAU,GAAA,CAAC,WAAW,CAAA,CAAA;AAAA,EAC7B,OAAO,MAAS,GAAA,EAAE,WAAa,EAAA,MAAA,EAAQ,cAAc,MAAO,EAAA,CAAA;AAAA,EAOpD,aAAsD,GAAA,IAAA,CAAA;AAAA;AAAA,EAG9D,KAAM,KAAc,EAAA;AAClB,IAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,IAAA,IAAI,CAAC,IAAK,CAAA,kBAAA;AAAoB,MAAA,OAAA;AAC9B,IAAA,MAAM,IAAO,GAAA,QAAA,CAAS,IAAK,CAAA,eAAA,CAAgB,OAAO,EAAE,CAAA,CAAA;AACpD,IAAA,IAAI,CAAC,KAAA,CAAM,IAAI,CAAA,IAAK,QAAQ,CAAG,EAAA;AAC7B,MAAK,IAAA,CAAA,QAAA,CAAS,KAAK,gBAAiB,CAAA,OAAA,CAAQ,YAAY,MAAO,CAAA,IAAI,CAAC,CAAC,CAAA,CAAA;AAAA,KACvE;AAAA,GACF;AAAA;AAAA;AAAA,EAIA,eAAmB,GAAA;AACjB,IAAA,IAAI,IAAK,CAAA,aAAA;AAAe,MAAA,YAAA,CAAa,KAAK,aAAa,CAAA,CAAA;AACvD,IAAK,IAAA,CAAA,aAAA,GAAgB,WAAW,MAAM;AACpC,MAAA,IAAI,CAAC,IAAK,CAAA,kBAAA;AAAoB,QAAA,OAAA;AAC9B,MAAA,MAAM,QAAQ,IAAK,CAAA,eAAA,CAAA;AACnB,MAAA,MAAM,IAAQ,GAAA,QAAA,CAAS,KAAM,CAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AACtC,MAAA,MAAM,GAAQ,GAAA,QAAA,CAAS,KAAM,CAAA,GAAA,EAAK,EAAE,CAAA,CAAA;AACpC,MAAI,IAAA,CAAC,MAAM,IAAI,CAAA,IAAK,QAAQ,CAAM,KAAA,CAAC,GAAO,IAAA,IAAA,IAAQ,GAAM,CAAA,EAAA;AACtD,QAAK,IAAA,CAAA,QAAA,CAAS,KAAK,gBAAiB,CAAA,OAAA,CAAQ,YAAY,MAAO,CAAA,IAAI,CAAC,CAAC,CAAA,CAAA;AAAA,OACvE;AAAA,OACC,GAAG,CAAA,CAAA;AAAA,GACR;AAAA;AAAA,EAGA,SAAU,KAAc,EAAA;AACtB,IAAA,MAAM,SAAS,KAAM,CAAA,MAAA,CAAA;AACrB,IAAA,MAAM,OAAO,MAAO,CAAA,KAAA,CAAA;AACpB,IAAI,IAAA,IAAA,IAAQ,SAAS,GAAK,EAAA;AACxB,MAAA,IAAA,CAAK,SAAS,IAAI,CAAA,CAAA;AAAA,KACpB;AAAA,GACF;AAAA;AAAA,EAGQ,SAAU,GAAa,EAAA;AAC7B,IAAA,IAAK,OAAe,KAAO,EAAA;AACzB,MAAC,MAAA,CAAe,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAAA,KAC1B,MAAA;AACL,MAAA,MAAA,CAAO,SAAS,IAAO,GAAA,GAAA,CAAA;AAAA,KACzB;AAAA,GACF;AACF;;;;"}
|
|
@@ -8,6 +8,25 @@ class Table extends Controller {
|
|
|
8
8
|
cb.checked = checked;
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
+
navigateRow(event) {
|
|
12
|
+
const target = event.target;
|
|
13
|
+
if (target.closest('a, button, input, select, textarea, [role="button"]'))
|
|
14
|
+
return;
|
|
15
|
+
const row = event.currentTarget;
|
|
16
|
+
const href = row.dataset.href;
|
|
17
|
+
if (!href)
|
|
18
|
+
return;
|
|
19
|
+
if (event.metaKey || event.ctrlKey) {
|
|
20
|
+
window.open(href, "_blank");
|
|
21
|
+
} else {
|
|
22
|
+
const Turbo = window.Turbo;
|
|
23
|
+
if (Turbo?.visit) {
|
|
24
|
+
Turbo.visit(href);
|
|
25
|
+
} else {
|
|
26
|
+
window.location.href = href;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
11
30
|
updateSelectAll() {
|
|
12
31
|
if (!this.hasSelectAllTarget)
|
|
13
32
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_component_controller.js","sources":["../../../../../../../app/components/midwest/table_component/table_component_controller.ts"],"sourcesContent":["import { Controller } from '@hotwired/stimulus'\n\nexport default class Table extends Controller<HTMLElement> {\n static targets = ['selectAll', 'rowCheckbox']\n\n declare readonly selectAllTarget: HTMLInputElement\n declare readonly rowCheckboxTargets: HTMLInputElement[]\n declare readonly hasSelectAllTarget: boolean\n\n toggleAll () {\n const checked = this.selectAllTarget.checked\n this.rowCheckboxTargets.forEach(cb => { cb.checked = checked })\n }\n\n updateSelectAll () {\n if (!this.hasSelectAllTarget) return\n\n const total = this.rowCheckboxTargets.length\n const checkedCount = this.rowCheckboxTargets.filter(cb => cb.checked).length\n\n if (checkedCount === 0) {\n this.selectAllTarget.checked = false\n this.selectAllTarget.indeterminate = false\n } else if (checkedCount === total) {\n this.selectAllTarget.checked = true\n this.selectAllTarget.indeterminate = false\n } else {\n this.selectAllTarget.checked = false\n this.selectAllTarget.indeterminate = true\n }\n }\n}\n"],"names":[],"mappings":";;AAEA,MAAqB,cAAc,UAAwB,CAAA;AAAA,EACzD,OAAO,OAAA,GAAU,CAAC,WAAA,EAAa,aAAa,CAAA,CAAA;AAAA,EAM5C,SAAa,GAAA;AACX,IAAM,MAAA,OAAA,GAAU,KAAK,eAAgB,CAAA,OAAA,CAAA;AACrC,IAAK,IAAA,CAAA,kBAAA,CAAmB,QAAQ,CAAM,EAAA,KAAA;AAAE,MAAA,EAAA,CAAG,OAAU,GAAA,OAAA,CAAA;AAAA,KAAS,CAAA,CAAA;AAAA,GAChE;AAAA,EAEA,eAAmB,GAAA;AACjB,IAAA,IAAI,CAAC,IAAK,CAAA,kBAAA;AAAoB,MAAA,OAAA;AAE9B,IAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,CAAA,MAAA,CAAA;AACtC,IAAA,MAAM,eAAe,IAAK,CAAA,kBAAA,CAAmB,OAAO,CAAM,EAAA,KAAA,EAAA,CAAG,OAAO,CAAE,CAAA,MAAA,CAAA;AAEtE,IAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,MAAA,IAAA,CAAK,gBAAgB,OAAU,GAAA,KAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,gBAAgB,aAAgB,GAAA,KAAA,CAAA;AAAA,KACvC,MAAA,IAAW,iBAAiB,KAAO,EAAA;AACjC,MAAA,IAAA,CAAK,gBAAgB,OAAU,GAAA,IAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,gBAAgB,aAAgB,GAAA,KAAA,CAAA;AAAA,KAChC,MAAA;AACL,MAAA,IAAA,CAAK,gBAAgB,OAAU,GAAA,KAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,gBAAgB,aAAgB,GAAA,IAAA,CAAA;AAAA,KACvC;AAAA,GACF;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"table_component_controller.js","sources":["../../../../../../../app/components/midwest/table_component/table_component_controller.ts"],"sourcesContent":["import { Controller } from '@hotwired/stimulus'\n\nexport default class Table extends Controller<HTMLElement> {\n static targets = ['selectAll', 'rowCheckbox']\n\n declare readonly selectAllTarget: HTMLInputElement\n declare readonly rowCheckboxTargets: HTMLInputElement[]\n declare readonly hasSelectAllTarget: boolean\n\n toggleAll () {\n const checked = this.selectAllTarget.checked\n this.rowCheckboxTargets.forEach(cb => { cb.checked = checked })\n }\n\n navigateRow (event: MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('a, button, input, select, textarea, [role=\"button\"]')) return\n\n const row = event.currentTarget as HTMLElement\n const href = row.dataset.href\n if (!href) return\n\n if (event.metaKey || event.ctrlKey) {\n window.open(href, '_blank')\n } else {\n const Turbo = (window as any).Turbo\n if (Turbo?.visit) {\n Turbo.visit(href)\n } else {\n window.location.href = href\n }\n }\n }\n\n updateSelectAll () {\n if (!this.hasSelectAllTarget) return\n\n const total = this.rowCheckboxTargets.length\n const checkedCount = this.rowCheckboxTargets.filter(cb => cb.checked).length\n\n if (checkedCount === 0) {\n this.selectAllTarget.checked = false\n this.selectAllTarget.indeterminate = false\n } else if (checkedCount === total) {\n this.selectAllTarget.checked = true\n this.selectAllTarget.indeterminate = false\n } else {\n this.selectAllTarget.checked = false\n this.selectAllTarget.indeterminate = true\n }\n }\n}\n"],"names":[],"mappings":";;AAEA,MAAqB,cAAc,UAAwB,CAAA;AAAA,EACzD,OAAO,OAAA,GAAU,CAAC,WAAA,EAAa,aAAa,CAAA,CAAA;AAAA,EAM5C,SAAa,GAAA;AACX,IAAM,MAAA,OAAA,GAAU,KAAK,eAAgB,CAAA,OAAA,CAAA;AACrC,IAAK,IAAA,CAAA,kBAAA,CAAmB,QAAQ,CAAM,EAAA,KAAA;AAAE,MAAA,EAAA,CAAG,OAAU,GAAA,OAAA,CAAA;AAAA,KAAS,CAAA,CAAA;AAAA,GAChE;AAAA,EAEA,YAAa,KAAmB,EAAA;AAC9B,IAAA,MAAM,SAAS,KAAM,CAAA,MAAA,CAAA;AACrB,IAAI,IAAA,MAAA,CAAO,QAAQ,qDAAqD,CAAA;AAAG,MAAA,OAAA;AAE3E,IAAA,MAAM,MAAM,KAAM,CAAA,aAAA,CAAA;AAClB,IAAM,MAAA,IAAA,GAAO,IAAI,OAAQ,CAAA,IAAA,CAAA;AACzB,IAAA,IAAI,CAAC,IAAA;AAAM,MAAA,OAAA;AAEX,IAAI,IAAA,KAAA,CAAM,OAAW,IAAA,KAAA,CAAM,OAAS,EAAA;AAClC,MAAO,MAAA,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA,CAAA;AAAA,KACrB,MAAA;AACL,MAAA,MAAM,QAAS,MAAe,CAAA,KAAA,CAAA;AAC9B,MAAA,IAAI,OAAO,KAAO,EAAA;AAChB,QAAA,KAAA,CAAM,MAAM,IAAI,CAAA,CAAA;AAAA,OACX,MAAA;AACL,QAAA,MAAA,CAAO,SAAS,IAAO,GAAA,IAAA,CAAA;AAAA,OACzB;AAAA,KACF;AAAA,GACF;AAAA,EAEA,eAAmB,GAAA;AACjB,IAAA,IAAI,CAAC,IAAK,CAAA,kBAAA;AAAoB,MAAA,OAAA;AAE9B,IAAM,MAAA,KAAA,GAAQ,KAAK,kBAAmB,CAAA,MAAA,CAAA;AACtC,IAAA,MAAM,eAAe,IAAK,CAAA,kBAAA,CAAmB,OAAO,CAAM,EAAA,KAAA,EAAA,CAAG,OAAO,CAAE,CAAA,MAAA,CAAA;AAEtE,IAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,MAAA,IAAA,CAAK,gBAAgB,OAAU,GAAA,KAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,gBAAgB,aAAgB,GAAA,KAAA,CAAA;AAAA,KACvC,MAAA,IAAW,iBAAiB,KAAO,EAAA;AACjC,MAAA,IAAA,CAAK,gBAAgB,OAAU,GAAA,IAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,gBAAgB,aAAgB,GAAA,KAAA,CAAA;AAAA,KAChC,MAAA;AACL,MAAA,IAAA,CAAK,gBAAgB,OAAU,GAAA,KAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,gBAAgB,aAAgB,GAAA,IAAA,CAAA;AAAA,KACvC;AAAA,GACF;AACF;;;;"}
|
|
@@ -4784,6 +4784,25 @@ class Table extends Controller {
|
|
|
4784
4784
|
cb.checked = checked;
|
|
4785
4785
|
});
|
|
4786
4786
|
}
|
|
4787
|
+
navigateRow(event) {
|
|
4788
|
+
const target = event.target;
|
|
4789
|
+
if (target.closest('a, button, input, select, textarea, [role="button"]'))
|
|
4790
|
+
return;
|
|
4791
|
+
const row = event.currentTarget;
|
|
4792
|
+
const href = row.dataset.href;
|
|
4793
|
+
if (!href)
|
|
4794
|
+
return;
|
|
4795
|
+
if (event.metaKey || event.ctrlKey) {
|
|
4796
|
+
window.open(href, "_blank");
|
|
4797
|
+
} else {
|
|
4798
|
+
const Turbo = window.Turbo;
|
|
4799
|
+
if (Turbo?.visit) {
|
|
4800
|
+
Turbo.visit(href);
|
|
4801
|
+
} else {
|
|
4802
|
+
window.location.href = href;
|
|
4803
|
+
}
|
|
4804
|
+
}
|
|
4805
|
+
}
|
|
4787
4806
|
updateSelectAll() {
|
|
4788
4807
|
if (!this.hasSelectAllTarget)
|
|
4789
4808
|
return;
|
|
@@ -4858,6 +4877,54 @@ class LoadMore extends Controller {
|
|
|
4858
4877
|
}
|
|
4859
4878
|
}
|
|
4860
4879
|
|
|
4880
|
+
class Pagination extends Controller {
|
|
4881
|
+
static targets = ["jumpInput"];
|
|
4882
|
+
static values = { urlTemplate: String, turboFrameId: String };
|
|
4883
|
+
debounceTimer = null;
|
|
4884
|
+
// Intercepts the jump-to-page form submit and navigates to the resolved URL.
|
|
4885
|
+
jump(event) {
|
|
4886
|
+
event.preventDefault();
|
|
4887
|
+
if (!this.hasJumpInputTarget)
|
|
4888
|
+
return;
|
|
4889
|
+
const page = parseInt(this.jumpInputTarget.value, 10);
|
|
4890
|
+
if (!isNaN(page) && page >= 1) {
|
|
4891
|
+
this.visitUrl(this.urlTemplateValue.replace("__PAGE__", String(page)));
|
|
4892
|
+
}
|
|
4893
|
+
}
|
|
4894
|
+
// Debounced handler for the `incremental` input — navigates 400 ms after the
|
|
4895
|
+
// user stops typing, and only when the value is within the valid page range.
|
|
4896
|
+
jumpIncremental() {
|
|
4897
|
+
if (this.debounceTimer)
|
|
4898
|
+
clearTimeout(this.debounceTimer);
|
|
4899
|
+
this.debounceTimer = setTimeout(() => {
|
|
4900
|
+
if (!this.hasJumpInputTarget)
|
|
4901
|
+
return;
|
|
4902
|
+
const input = this.jumpInputTarget;
|
|
4903
|
+
const page = parseInt(input.value, 10);
|
|
4904
|
+
const max = parseInt(input.max, 10);
|
|
4905
|
+
if (!isNaN(page) && page >= 1 && (!max || page <= max)) {
|
|
4906
|
+
this.visitUrl(this.urlTemplateValue.replace("__PAGE__", String(page)));
|
|
4907
|
+
}
|
|
4908
|
+
}, 400);
|
|
4909
|
+
}
|
|
4910
|
+
// Navigates to the URL selected in the per-page <select> element.
|
|
4911
|
+
navigate(event) {
|
|
4912
|
+
const select = event.target;
|
|
4913
|
+
const href = select.value;
|
|
4914
|
+
if (href && href !== "#") {
|
|
4915
|
+
this.visitUrl(href);
|
|
4916
|
+
}
|
|
4917
|
+
}
|
|
4918
|
+
// Navigates to a URL via Turbo visit, updating the browser URL.
|
|
4919
|
+
visitUrl(url) {
|
|
4920
|
+
if (window.Turbo) {
|
|
4921
|
+
window.Turbo.visit(url);
|
|
4922
|
+
} else {
|
|
4923
|
+
window.location.href = url;
|
|
4924
|
+
}
|
|
4925
|
+
}
|
|
4926
|
+
}
|
|
4927
|
+
|
|
4861
4928
|
function registerMidwestControllers(application) {
|
|
4862
4929
|
application.register("midwest-card", Card);
|
|
4863
4930
|
application.register("midwest-banner", Banner);
|
|
@@ -4885,6 +4952,7 @@ function registerMidwestControllers(application) {
|
|
|
4885
4952
|
application.register("midwest-horizontal-scroll", HorizontalScroll);
|
|
4886
4953
|
application.register("midwest-table", Table);
|
|
4887
4954
|
application.register("midwest-load-more", LoadMore);
|
|
4955
|
+
application.register("midwest-pagination", Pagination);
|
|
4888
4956
|
}
|
|
4889
4957
|
|
|
4890
4958
|
export { Banner, Card, Chart, CountdownTimer, registerMidwestControllers };
|