ideasbugs 0.7.7 → 0.8.0

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.
@@ -1,143 +1,164 @@
1
- :root {
1
+ /* Dashboard styles.
2
+ *
3
+ * Three layers, and the split is what lets a host replace the layout:
4
+ *
5
+ * :root custom properties, all `--ib-` prefixed so they can
6
+ * neither overwrite a host's nor be overwritten by them.
7
+ * .ib-page the page frame (was bare html/body). Only the gem's own
8
+ * layout puts this class on <body>, so inside a host admin
9
+ * these rules simply do not apply.
10
+ * .ib-dashboard everything else, nested. Names like .container, .card
11
+ * and .tabs are confined to the dashboard's own markup, so
12
+ * loading this file inside a host cannot restyle its chrome.
13
+ *
14
+ * Nothing here styles a bare `body`, `a`, `table` or `*` at the top level.
15
+ */
16
+
17
+
18
+ :root {
2
19
  color-scheme: light dark;
3
- --bg: #f6f7f9; --surface: #fff; --text: #1c2024; --muted: #6b7280;
4
- --border: #e5e7eb; --accent: #2563eb; --accent-text: #fff;
5
- --bug: #dc2626; --feature: #16a34a; --other: #6b7280;
6
- --open: #2563eb; --in_review: #d97706; --resolved: #16a34a;
7
- }
8
- @media (prefers-color-scheme: dark) {
9
- :root {
10
- --bg: #111418; --surface: #1a1f26; --text: #e6e8ea; --muted: #9aa2ab;
11
- --border: #2a313a; --accent: #3b82f6;
12
- }
13
- }
14
- * { box-sizing: border-box; }
15
- body { margin: 0; background: var(--bg); color: var(--text);
16
- font: 15px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; }
17
- a { color: var(--accent); text-decoration: none; }
18
- a:hover { text-decoration: underline; }
19
- .container { max-width: 960px; margin: 0 auto; padding: 24px 16px 64px; }
20
- h1 { font-size: 22px; margin: 0 0 16px; }
21
- .tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); margin-bottom: 16px; flex-wrap: wrap; }
22
- .tabs a { padding: 8px 14px; border-radius: 8px 8px 0 0; color: var(--muted); }
23
- .tabs a.active { color: var(--text); font-weight: 600; border: 1px solid var(--border);
24
- border-bottom: 2px solid var(--surface); background: var(--surface); margin-bottom: -1px; }
25
- .tabs a:hover { text-decoration: none; color: var(--text); }
26
- .count { display: inline-block; min-width: 20px; padding: 0 6px; margin-left: 4px; border-radius: 999px;
27
- background: var(--border); font-size: 12px; text-align: center; }
28
- .filters { margin-bottom: 16px; display: flex; gap: 8px; align-items: center; }
29
- .filters select, .filters input[type=search] { padding: 6px 8px; border: 1px solid var(--border);
30
- border-radius: 8px; background: var(--surface); color: var(--text); font: inherit; }
31
- .filters input[type=search] { flex: 1; max-width: 320px; }
32
- .card { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; overflow: hidden; }
33
- .card.pad { padding: 16px; }
34
- table { width: 100%; border-collapse: collapse; }
35
- th, td { padding: 10px 14px; text-align: left; vertical-align: top; }
36
- th { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted);
37
- border-bottom: 1px solid var(--border); }
38
- tr + tr td { border-top: 1px solid var(--border); }
39
- .badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600;
40
- color: #fff; white-space: nowrap; }
41
- .badge.kind-bug { background: var(--bug); }
42
- .badge.kind-feature { background: var(--feature); }
43
- .badge.kind-other, .badge.kind-default { background: var(--other); }
44
- .badge.status-open { background: var(--open); }
45
- .badge.status-in_review { background: var(--in_review); }
46
- .badge.status-resolved { background: var(--resolved); }
47
- .muted { color: var(--muted); font-size: 13px; }
48
- .pager { margin-top: 16px; display: flex; gap: 16px; }
49
- .actions { display: flex; gap: 8px; flex-wrap: wrap; margin: 16px 0; }
50
- .actions form { display: inline; }
51
- button, .button { padding: 8px 14px; border: 1px solid var(--border); border-radius: 8px; cursor: pointer;
52
- background: var(--surface); color: var(--text); font: inherit; }
53
- button.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-text); }
54
- button.danger { color: var(--bug); }
55
- .message { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
56
- dl { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; margin: 0; }
57
- dt { color: var(--muted); }
58
- dd { margin: 0; overflow-wrap: anywhere; }
59
- .shots { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
60
- .shots img { max-width: 280px; max-height: 200px; border: 1px solid var(--border); border-radius: 8px; }
61
- .empty { padding: 48px 16px; text-align: center; color: var(--muted); }
62
- .breadcrumb { margin-bottom: 12px; font-size: 13px; }
63
- .case-id { color: var(--muted); font-weight: 400; font-size: 15px; }
64
- .panel-head { flex: 0 0 auto; }
65
- .panel-head h1 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
66
- .detail-scroll { display: flex; flex-direction: column; gap: 12px; min-height: 0; }
67
- .feedback-panel { min-width: 0; display: flex; flex-direction: column; }
68
- .feedback-panel .actions { flex: 0 0 auto; }
69
- .feedback-panel .detail-scroll > .actions { margin: 0; }
20
+ --ib-bg: #f6f7f9; --ib-surface: #fff; --ib-text: #1c2024; --ib-muted: #6b7280;
21
+ --ib-border: #e5e7eb; --ib-accent: #2563eb; --ib-accent-text: #fff;
22
+ --ib-bug: #dc2626; --ib-feature: #16a34a; --ib-other: #6b7280;
23
+ --ib-open: #2563eb; --in_review: #d97706; --ib-resolved: #16a34a;
24
+ }
25
+ @media (prefers-color-scheme: dark) {
26
+ :root {
27
+ --ib-bg: #111418; --ib-surface: #1a1f26; --ib-text: #e6e8ea; --ib-muted: #9aa2ab;
28
+ --ib-border: #2a313a; --ib-accent: #3b82f6;
29
+ }
30
+ }
31
+ @media (max-width: 760px) {
32
+ .ib-page { font-size: 14px; }
33
+ .ib-index, .ib-show { overflow-x: hidden; }
34
+ .ib-index { overflow-y: auto; overflow-x: hidden; }
35
+ .ib-index, .ib-index .container { min-height: 100vh; height: auto; }
36
+ .ib-index .container { padding-bottom: 10px; }
37
+ .ib-dashboard {
38
+ & .container { padding: 14px 10px 24px; }
39
+ & .feedback-panel,
40
+ & .detail-scroll,
41
+ & .card,
42
+ & dl,
43
+ & dd { min-width: 0; max-width: 100%; }
44
+ & .feedback-panel .card { width: calc(100vw - 20px); }
45
+ & .message,
46
+ & dd,
47
+ & .muted { max-width: calc(100vw - 54px); }
48
+ & .triage-shell { display: block; min-height: calc(100vh - 62px); }
49
+ & .triage-sidebar,
50
+ & .triage-detail { min-height: calc(100vh - 62px); }
51
+ & .triage-shell.has-selected .triage-sidebar { display: none; }
52
+ & .triage-shell:not(.has-selected) .triage-detail { display: none; }
53
+ & .feedback-list { overflow: visible; }
54
+ & .feedback-row { padding: 12px; }
55
+ & .feedback-meta { display: none; }
56
+ & .triage-detail .feedback-panel { min-height: calc(100vh - 64px); }
57
+ & .mobile-back { display: block; flex: 0 0 auto; margin: 10px 10px 0; font-size: 13px; }
58
+ & .panel-head h1 { font-size: 18px; }
59
+ & dl { grid-template-columns: 1fr; gap: 3px; }
60
+ }
61
+ }
70
62
 
71
- /* Desktop triage: list on the left, selected feedback on the right. */
72
- .ib-index, .ib-index .container { height: 100vh; height: 100dvh; }
73
- .ib-index { overflow: hidden; }
74
- .ib-index .container { max-width: 1280px; display: flex; flex-direction: column; padding-bottom: 16px; }
75
- .ib-index .container > h1 { flex: 0 0 auto; margin-bottom: 14px; }
76
- .triage-shell { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(320px, 400px) 1fr;
77
- gap: 16px; }
78
- .triage-sidebar { min-width: 0; min-height: 0; display: flex; flex-direction: column;
79
- background: var(--surface); border: 1px solid var(--border);
80
- border-radius: 8px; overflow: hidden; }
81
- .triage-sidebar .tabs { flex: 0 0 auto; margin: 12px 12px 0; padding: 0; background: transparent;
82
- border: 0; border-radius: 0; gap: 6px; flex-wrap: nowrap; }
83
- .triage-sidebar .tabs a { flex: 1 1 0; position: relative; display: flex; align-items: center;
84
- justify-content: center; gap: 6px; min-height: 34px; padding: 5px 10px 8px;
85
- border-radius: 8px; color: var(--muted); font-weight: 600; }
86
- .triage-sidebar .tabs a.active { color: var(--text); border: 0; background: transparent; box-shadow: none; margin: 0; }
87
- .triage-sidebar .tabs a.active::after { content: ""; position: absolute; left: 20px; right: 20px; bottom: 0;
88
- height: 2px; border-radius: 999px; background: var(--accent); }
89
- .triage-sidebar .tabs a:not(.active):hover { text-decoration: none; color: var(--text); background: var(--bg); }
90
- .triage-sidebar .tabs .count { margin-left: 0; background: color-mix(in srgb, var(--muted) 14%, transparent); }
91
- .triage-sidebar .tabs a.active .count { background: var(--border); }
92
- .triage-sidebar .filters { flex: 0 0 auto; display: grid; grid-template-columns: minmax(0, 1fr) auto;
93
- margin: 0; padding: 12px; border-bottom: 1px solid var(--border); }
94
- .triage-sidebar .filters select { grid-column: 1 / -1; width: 100%; }
95
- .triage-sidebar .filters input[type=search] { min-width: 0; max-width: none; }
96
- .feedback-list { flex: 1 1 auto; min-height: 0; overflow-y: auto; }
97
- .feedback-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; padding: 13px 14px;
98
- color: var(--text); border-bottom: 1px solid var(--border); }
99
- .feedback-row:hover { text-decoration: none; background: var(--bg); }
100
- .feedback-row.active { background: color-mix(in srgb, var(--accent) 9%, var(--surface));
101
- box-shadow: inset 3px 0 0 var(--accent); }
102
- .feedback-main { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
103
- .feedback-topline, .feedback-meta { display: flex; align-items: center; gap: 8px; min-width: 0; }
104
- .feedback-message, .feedback-meta span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
105
- .feedback-message { display: block; font-weight: 600; }
106
- .feedback-time { margin-left: auto; white-space: nowrap; }
107
- .attachment-count { align-self: start; white-space: nowrap; }
108
- .triage-sidebar .pager { flex: 0 0 auto; margin: 0; padding: 10px 12px; border-top: 1px solid var(--border); }
109
- .triage-detail { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
110
- .triage-detail .feedback-panel { flex: 1 1 auto; min-height: 0; }
111
- .triage-detail .detail-scroll { flex: 1 1 auto; overflow-y: auto; padding-right: 2px; }
112
- .triage-detail .actions { margin-bottom: 0; }
113
- .empty-state { margin: auto; max-width: 320px; padding: 24px; text-align: center; }
114
- .empty-state h2 { margin: 0 0 6px; font-size: 18px; }
115
- .empty-state p { margin: 0; }
116
- .mobile-back { display: none; }
63
+ /* Page frame the gem's own layout only. */
64
+ .ib-page { margin: 0; background: var(--ib-bg); color: var(--ib-text); font: 15px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; }
65
+ .ib-index { overflow: hidden; }
66
+ .ib-index .container { max-width: 1280px; display: flex; flex-direction: column; padding-bottom: 16px; }
67
+ .ib-index .container > h1 { flex: 0 0 auto; margin-bottom: 14px; }
68
+ .ib-show .feedback-panel { gap: 0; }
69
+ .ib-show .detail-scroll { overflow: visible; }
117
70
 
118
- /* Standalone show pages keep normal page scrolling. */
71
+ /* Dashboard components any layout. */
72
+ .ib-dashboard {
73
+ & * { box-sizing: border-box; }
74
+ & a { color: var(--ib-accent); text-decoration: none; }
75
+ & a:hover { text-decoration: underline; }
76
+ & .container { max-width: 960px; margin: 0 auto; padding: 24px 16px 64px; }
77
+ & h1 { font-size: 22px; margin: 0 0 16px; }
78
+ & .tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--ib-border); margin-bottom: 16px; flex-wrap: wrap; }
79
+ & .tabs a { padding: 8px 14px; border-radius: 8px 8px 0 0; color: var(--ib-muted); }
80
+ & .tabs a.active { color: var(--ib-text); font-weight: 600; border: 1px solid var(--ib-border); border-bottom: 2px solid var(--ib-surface); background: var(--ib-surface); margin-bottom: -1px; }
81
+ & .tabs a:hover { text-decoration: none; color: var(--ib-text); }
82
+ & .count { display: inline-block; min-width: 20px; padding: 0 6px; margin-left: 4px; border-radius: 999px; background: var(--ib-border); font-size: 12px; text-align: center; }
83
+ & .filters { margin-bottom: 16px; display: flex; gap: 8px; align-items: center; }
84
+ & .filters select,
85
+ & .filters input[type=search] { padding: 6px 8px; border: 1px solid var(--ib-border); border-radius: 8px; background: var(--ib-surface); color: var(--ib-text); font: inherit; }
86
+ & .filters input[type=search] { flex: 1; max-width: 320px; }
87
+ & .card { background: var(--ib-surface); border: 1px solid var(--ib-border); border-radius: 12px; overflow: hidden; }
88
+ & .card.pad { padding: 16px; }
89
+ & table { width: 100%; border-collapse: collapse; }
90
+ & th,
91
+ & td { padding: 10px 14px; text-align: left; vertical-align: top; }
92
+ & th { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--ib-muted); border-bottom: 1px solid var(--ib-border); }
93
+ & tr + tr td { border-top: 1px solid var(--ib-border); }
94
+ & .badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; color: #fff; white-space: nowrap; }
95
+ & .badge.kind-bug { background: var(--ib-bug); }
96
+ & .badge.kind-feature { background: var(--ib-feature); }
97
+ & .badge.kind-other,
98
+ & .badge.kind-default { background: var(--ib-other); }
99
+ & .badge.status-open { background: var(--ib-open); }
100
+ & .badge.status-in_review { background: var(--in_review); }
101
+ & .badge.status-resolved { background: var(--ib-resolved); }
102
+ & .muted { color: var(--ib-muted); font-size: 13px; }
103
+ & .pager { margin-top: 16px; display: flex; gap: 16px; }
104
+ & .actions { display: flex; gap: 8px; flex-wrap: wrap; margin: 16px 0; }
105
+ & .actions form { display: inline; }
106
+ & button,
107
+ & .button { padding: 8px 14px; border: 1px solid var(--ib-border); border-radius: 8px; cursor: pointer; background: var(--ib-surface); color: var(--ib-text); font: inherit; }
108
+ & button.primary { background: var(--ib-accent); border-color: var(--ib-accent); color: var(--ib-accent-text); }
109
+ & button.danger { color: var(--ib-bug); }
110
+ & .message { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
111
+ & dl { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; margin: 0; }
112
+ & dt { color: var(--ib-muted); }
113
+ & dd { margin: 0; overflow-wrap: anywhere; }
114
+ & .shots { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
115
+ & .shots img { max-width: 280px; max-height: 200px; border: 1px solid var(--ib-border); border-radius: 8px; }
116
+ & .empty { padding: 48px 16px; text-align: center; color: var(--ib-muted); }
117
+ & .breadcrumb { margin-bottom: 12px; font-size: 13px; }
118
+ & .case-id { color: var(--ib-muted); font-weight: 400; font-size: 15px; }
119
+ & .panel-head { flex: 0 0 auto; }
120
+ & .panel-head h1 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
121
+ & .detail-scroll { display: flex; flex-direction: column; gap: 12px; min-height: 0; }
122
+ & .feedback-panel { min-width: 0; display: flex; flex-direction: column; }
123
+ & .feedback-panel .actions { flex: 0 0 auto; }
124
+ & .feedback-panel .detail-scroll > .actions { margin: 0; }
125
+ & /* Desktop triage: list on the left,
126
+ & selected feedback on the right. */
127
+ .ib-index,
128
+ & .ib-index .container { height: 100vh; height: 100dvh; }
129
+ & .triage-shell { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(320px, 400px) 1fr; gap: 16px; }
130
+ & .triage-sidebar { min-width: 0; min-height: 0; display: flex; flex-direction: column; background: var(--ib-surface); border: 1px solid var(--ib-border); border-radius: 8px; overflow: hidden; }
131
+ & .triage-sidebar .tabs { flex: 0 0 auto; margin: 12px 12px 0; padding: 0; background: transparent; border: 0; border-radius: 0; gap: 6px; flex-wrap: nowrap; }
132
+ & .triage-sidebar .tabs a { flex: 1 1 0; position: relative; display: flex; align-items: center; justify-content: center; gap: 6px; min-height: 34px; padding: 5px 10px 8px; border-radius: 8px; color: var(--ib-muted); font-weight: 600; }
133
+ & .triage-sidebar .tabs a.active { color: var(--ib-text); border: 0; background: transparent; box-shadow: none; margin: 0; }
134
+ & .triage-sidebar .tabs a.active::after { content: ""; position: absolute; left: 20px; right: 20px; bottom: 0; height: 2px; border-radius: 999px; background: var(--ib-accent); }
135
+ & .triage-sidebar .tabs a:not(.active):hover { text-decoration: none; color: var(--ib-text); background: var(--ib-bg); }
136
+ & .triage-sidebar .tabs .count { margin-left: 0; background: color-mix(in srgb, var(--ib-muted) 14%, transparent); }
137
+ & .triage-sidebar .tabs a.active .count { background: var(--ib-border); }
138
+ & .triage-sidebar .filters { flex: 0 0 auto; display: grid; grid-template-columns: minmax(0, 1fr) auto; margin: 0; padding: 12px; border-bottom: 1px solid var(--ib-border); }
139
+ & .triage-sidebar .filters select { grid-column: 1 / -1; width: 100%; }
140
+ & .triage-sidebar .filters input[type=search] { min-width: 0; max-width: none; }
141
+ & .feedback-list { flex: 1 1 auto; min-height: 0; overflow-y: auto; }
142
+ & .feedback-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; padding: 13px 14px; color: var(--ib-text); border-bottom: 1px solid var(--ib-border); }
143
+ & .feedback-row:hover { text-decoration: none; background: var(--ib-bg); }
144
+ & .feedback-row.active { background: color-mix(in srgb, var(--ib-accent) 9%, var(--ib-surface)); box-shadow: inset 3px 0 0 var(--ib-accent); }
145
+ & .feedback-main { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
146
+ & .feedback-topline,
147
+ & .feedback-meta { display: flex; align-items: center; gap: 8px; min-width: 0; }
148
+ & .feedback-message,
149
+ & .feedback-meta span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
150
+ & .feedback-message { display: block; font-weight: 600; }
151
+ & .feedback-time { margin-left: auto; white-space: nowrap; }
152
+ & .attachment-count { align-self: start; white-space: nowrap; }
153
+ & .triage-sidebar .pager { flex: 0 0 auto; margin: 0; padding: 10px 12px; border-top: 1px solid var(--ib-border); }
154
+ & .triage-detail { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
155
+ & .triage-detail .feedback-panel { flex: 1 1 auto; min-height: 0; }
156
+ & .triage-detail .detail-scroll { flex: 1 1 auto; overflow-y: auto; padding-right: 2px; }
157
+ & .triage-detail .actions { margin-bottom: 0; }
158
+ & .empty-state { margin: auto; max-width: 320px; padding: 24px; text-align: center; }
159
+ & .empty-state h2 { margin: 0 0 6px; font-size: 18px; }
160
+ & .empty-state p { margin: 0; }
161
+ & .mobile-back { display: none; }
162
+ & /* Standalone show pages keep normal page scrolling. */
119
163
  .ib-show { min-height: 100vh; overflow: auto; }
120
- .ib-show .feedback-panel { gap: 0; }
121
- .ib-show .detail-scroll { overflow: visible; }
122
- @media (max-width: 760px) {
123
- body { font-size: 14px; }
124
- .container { padding: 14px 10px 24px; }
125
- .ib-index, .ib-show { overflow-x: hidden; }
126
- .feedback-panel, .detail-scroll, .card, dl, dd { min-width: 0; max-width: 100%; }
127
- .feedback-panel .card { width: calc(100vw - 20px); }
128
- .message, dd, .muted { max-width: calc(100vw - 54px); }
129
- .ib-index { overflow-y: auto; overflow-x: hidden; }
130
- .ib-index, .ib-index .container { min-height: 100vh; height: auto; }
131
- .ib-index .container { padding-bottom: 10px; }
132
- .triage-shell { display: block; min-height: calc(100vh - 62px); }
133
- .triage-sidebar, .triage-detail { min-height: calc(100vh - 62px); }
134
- .triage-shell.has-selected .triage-sidebar { display: none; }
135
- .triage-shell:not(.has-selected) .triage-detail { display: none; }
136
- .feedback-list { overflow: visible; }
137
- .feedback-row { padding: 12px; }
138
- .feedback-meta { display: none; }
139
- .triage-detail .feedback-panel { min-height: calc(100vh - 64px); }
140
- .mobile-back { display: block; flex: 0 0 auto; margin: 10px 10px 0; font-size: 13px; }
141
- .panel-head h1 { font-size: 18px; }
142
- dl { grid-template-columns: 1fr; gap: 3px; }
143
- }
164
+ }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ideasbugs
4
- VERSION = '0.7.7'
4
+ VERSION = '0.8.0'
5
5
  end
data/lib/ideasbugs.rb CHANGED
@@ -29,6 +29,13 @@ module Ideasbugs
29
29
 
30
30
  # Can this request browse and triage feedback? Checked by every dashboard
31
31
  # action.
32
+ # The class Ideasbugs::DashboardController inherits from. Resolved on every
33
+ # call rather than memoized, so a host that reassigns base_controller_class
34
+ # in a reloadable initializer is not pinned to a stale, unloaded constant.
35
+ def base_controller
36
+ config.base_controller_class.to_s.constantize
37
+ end
38
+
32
39
  def admin?(request)
33
40
  !!config.authorize_admin.call(request)
34
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ideasbugs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.7
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yaroslav Shmarov
@@ -34,13 +34,17 @@ executables: []
34
34
  extensions: []
35
35
  extra_rdoc_files: []
36
36
  files:
37
+ - AGENTS.md
37
38
  - CHANGELOG.md
38
39
  - MIT-LICENSE
39
40
  - README.md
40
41
  - Rakefile
42
+ - app/controllers/concerns/ideasbugs/request_context.rb
41
43
  - app/controllers/ideasbugs/application_controller.rb
44
+ - app/controllers/ideasbugs/dashboard_controller.rb
42
45
  - app/controllers/ideasbugs/feedbacks_controller.rb
43
46
  - app/controllers/ideasbugs/screenshots_controller.rb
47
+ - app/controllers/ideasbugs/submissions_controller.rb
44
48
  - app/controllers/ideasbugs/widgets_controller.rb
45
49
  - app/helpers/ideasbugs/widget_helper.rb
46
50
  - app/models/ideasbugs/application_record.rb
@@ -48,6 +52,7 @@ files:
48
52
  - app/views/ideasbugs/feedbacks/_feedback_panel.html.erb
49
53
  - app/views/ideasbugs/feedbacks/index.html.erb
50
54
  - app/views/ideasbugs/feedbacks/show.html.erb
55
+ - app/views/ideasbugs/shared/_dashboard.html.erb
51
56
  - app/views/layouts/ideasbugs/application.html.erb
52
57
  - config/locales/ideasbugs.ar.yml
53
58
  - config/locales/ideasbugs.bg.yml
@@ -79,6 +84,7 @@ files:
79
84
  - lib/generators/ideasbugs/install/install_generator.rb
80
85
  - lib/generators/ideasbugs/install/templates/create_ideasbugs_feedbacks.rb.tt
81
86
  - lib/generators/ideasbugs/install/templates/initializer.rb
87
+ - lib/generators/ideasbugs/migration_helpers.rb
82
88
  - lib/generators/ideasbugs/tenant/templates/add_tenant_to_ideasbugs_feedbacks.rb.tt
83
89
  - lib/generators/ideasbugs/tenant/tenant_generator.rb
84
90
  - lib/ideasbugs.rb