@youtyan/code-viewer 0.3.0 → 0.4.1

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/web/index.html CHANGED
@@ -171,6 +171,19 @@
171
171
  <p id="scope-exclude-names-help" class="scope-settings-help"></p>
172
172
  <p id="scope-omit-source"></p>
173
173
  </div>
174
+ <div class="scope-settings-section">
175
+ <strong id="datastore-section-title" class="scope-settings-section-title">Datastores</strong>
176
+ <label class="scope-settings-toggle">
177
+ <input id="datastore-infer-fk" type="checkbox" />
178
+ <span id="datastore-infer-fk-label">Infer FK from Rails-style naming</span>
179
+ </label>
180
+ <p id="datastore-infer-fk-help" class="scope-settings-help"></p>
181
+ <label class="scope-settings-toggle">
182
+ <input id="datastore-s3-tooltip" type="checkbox" />
183
+ <span id="datastore-s3-tooltip-label">Show S3 object preview tooltip on hover</span>
184
+ </label>
185
+ <p id="datastore-s3-tooltip-help" class="scope-settings-help"></p>
186
+ </div>
174
187
  <div class="scope-settings-section">
175
188
  <strong id="watch-section-title" class="scope-settings-section-title">File change watcher</strong>
176
189
  <label for="scope-watch-limit">Maximum directories to watch</label>
package/web/style.css CHANGED
@@ -4111,7 +4111,7 @@ body.gdp-file-detail-page #empty {
4111
4111
  .gdp-context-menu .danger {
4112
4112
  color: var(--danger);
4113
4113
  }
4114
- .gdp-trash-dialog-backdrop {
4114
+ .gdp-dialog-backdrop {
4115
4115
  position: fixed;
4116
4116
  inset: 0;
4117
4117
  z-index: 1100;
@@ -4121,30 +4121,30 @@ body.gdp-file-detail-page #empty {
4121
4121
  padding-top: min(14vh, 120px);
4122
4122
  background: rgba(31, 35, 40, 0.18);
4123
4123
  }
4124
- [data-theme="dark"] .gdp-trash-dialog-backdrop {
4124
+ [data-theme="dark"] .gdp-dialog-backdrop {
4125
4125
  background: rgba(1, 4, 9, 0.45);
4126
4126
  }
4127
- .gdp-trash-dialog {
4127
+ .gdp-dialog {
4128
4128
  width: min(420px, calc(100vw - 32px));
4129
4129
  border: 1px solid var(--border);
4130
4130
  border-radius: 8px;
4131
4131
  background: var(--bg);
4132
4132
  box-shadow: 0 16px 48px rgba(31, 35, 40, 0.28);
4133
4133
  }
4134
- .gdp-trash-dialog-title {
4134
+ .gdp-dialog-title {
4135
4135
  padding: 14px 16px 0;
4136
4136
  color: var(--fg);
4137
4137
  font-size: 15px;
4138
4138
  font-weight: 600;
4139
4139
  }
4140
- .gdp-trash-dialog-body {
4140
+ .gdp-dialog-body {
4141
4141
  padding: 8px 16px 14px;
4142
4142
  color: var(--fg-muted);
4143
4143
  font-size: 13px;
4144
4144
  line-height: 1.5;
4145
4145
  overflow-wrap: anywhere;
4146
4146
  }
4147
- .gdp-create-dir-input {
4147
+ .gdp-dialog-input {
4148
4148
  display: block;
4149
4149
  width: 100%;
4150
4150
  height: 32px;
@@ -4156,29 +4156,29 @@ body.gdp-file-detail-page #empty {
4156
4156
  color: var(--fg);
4157
4157
  font: inherit;
4158
4158
  }
4159
- .gdp-create-dir-input:focus {
4159
+ .gdp-dialog-input:focus {
4160
4160
  outline: 2px solid var(--accent-subtle);
4161
4161
  border-color: var(--accent);
4162
4162
  }
4163
- .gdp-create-dir-error {
4163
+ .gdp-dialog-error {
4164
4164
  min-height: 18px;
4165
4165
  margin-top: 6px;
4166
4166
  color: var(--danger);
4167
4167
  font-size: 12px;
4168
4168
  line-height: 18px;
4169
4169
  }
4170
- .gdp-trash-dialog-actions {
4170
+ .gdp-dialog-actions {
4171
4171
  display: flex;
4172
4172
  justify-content: flex-end;
4173
4173
  gap: 8px;
4174
4174
  padding: 12px 16px;
4175
4175
  border-top: 1px solid var(--border);
4176
4176
  }
4177
- .gdp-trash-dialog-danger {
4177
+ .gdp-dialog-danger {
4178
4178
  border-color: var(--danger);
4179
4179
  color: var(--danger);
4180
4180
  }
4181
- .gdp-trash-dialog-danger:hover {
4181
+ .gdp-dialog-danger:hover {
4182
4182
  background: var(--diff-del-bg);
4183
4183
  }
4184
4184
  .gdp-repo-empty {
@@ -4853,6 +4853,246 @@ body.query-history-panel-open #content {
4853
4853
  flex: 1;
4854
4854
  overflow-y: auto;
4855
4855
  }
4856
+ /* JetBrains 風 bottom dock。「クエリ履歴 / ログ」のタブストリップは pane の
4857
+ 開閉に関わらず常時表示し、画面下端に張り付く。タブクリックで pane を開閉
4858
+ する (アクティブタブ再クリックで閉じる)。右端の × でも閉じる。 */
4859
+ .db-history-dock {
4860
+ display: flex;
4861
+ align-items: stretch;
4862
+ gap: 0;
4863
+ min-height: 28px;
4864
+ border-top: 1px solid var(--border);
4865
+ background: var(--bg-soft);
4866
+ flex-shrink: 0;
4867
+ font-size: 12px;
4868
+ }
4869
+ .db-history-dock-tab {
4870
+ appearance: none;
4871
+ border: none;
4872
+ background: transparent;
4873
+ color: var(--fg-muted);
4874
+ font-family: inherit;
4875
+ font-size: inherit;
4876
+ padding: 0 14px;
4877
+ cursor: pointer;
4878
+ box-shadow: inset 0 2px 0 transparent;
4879
+ }
4880
+ .db-history-dock-tab:hover {
4881
+ background: var(--bg-mute);
4882
+ color: var(--fg);
4883
+ }
4884
+ /* active タブ: 上線 (accent) で「この pane を表示中」を示す。pane が閉じて
4885
+ いるときも「最後に開いていたタブ」がうっすら active のままだと混乱するので、
4886
+ dock.open が付いてるときだけ accent を強調する。 */
4887
+ .db-history-dock-tab.active {
4888
+ color: var(--fg);
4889
+ font-weight: 600;
4890
+ }
4891
+ .db-history-dock.open .db-history-dock-tab.active {
4892
+ color: var(--accent);
4893
+ box-shadow: inset 0 2px 0 var(--accent);
4894
+ }
4895
+ .db-history-dock-spacer {
4896
+ flex: 1;
4897
+ }
4898
+ .db-history-dock-close {
4899
+ appearance: none;
4900
+ border: none;
4901
+ background: transparent;
4902
+ color: var(--fg-muted);
4903
+ font-family: inherit;
4904
+ font-size: 14px;
4905
+ line-height: 1;
4906
+ padding: 0 10px;
4907
+ cursor: pointer;
4908
+ }
4909
+ .db-history-dock-close:hover {
4910
+ background: var(--bg-mute);
4911
+ color: var(--fg);
4912
+ }
4913
+ /* pane が閉じてるときは close ボタンも意味が無いので隠す。 */
4914
+ .db-history-dock:not(.open) .db-history-dock-close {
4915
+ visibility: hidden;
4916
+ }
4917
+ .db-history-pane-content {
4918
+ flex: 1;
4919
+ display: flex;
4920
+ flex-direction: column;
4921
+ overflow: hidden;
4922
+ }
4923
+ .db-history-pane-content[hidden] { display: none; }
4924
+ /* Session ログのレイアウト: クエリ履歴と同じ列構成。CSS は共通化せず、別系統
4925
+ として持つ (将来ストアやヘッダ構成が分岐しても影響を局所化できるように)。 */
4926
+ .db-session-log {
4927
+ height: 100%;
4928
+ display: flex;
4929
+ flex-direction: column;
4930
+ }
4931
+ .db-session-log-toolbar {
4932
+ display: flex;
4933
+ gap: 8px;
4934
+ padding: 8px 12px;
4935
+ border-bottom: 1px solid var(--border);
4936
+ }
4937
+ .db-session-log-action {
4938
+ padding: 4px 10px;
4939
+ border: 1px solid var(--border);
4940
+ border-radius: 4px;
4941
+ background: var(--bg);
4942
+ color: var(--fg);
4943
+ font-size: 12px;
4944
+ cursor: pointer;
4945
+ font-family: inherit;
4946
+ }
4947
+ .db-session-log-action:hover {
4948
+ background: var(--bg-mute);
4949
+ }
4950
+ /* 自動追従トグル ON 中の active 状態 (db-tool-btn.active と同じ accent 配色)。 */
4951
+ .db-session-log-action.active {
4952
+ background: color-mix(in srgb, var(--accent) 12%, var(--bg));
4953
+ color: var(--accent);
4954
+ border-color: var(--accent);
4955
+ font-weight: 600;
4956
+ }
4957
+ .db-session-log-danger {
4958
+ color: var(--danger, #d32f2f);
4959
+ }
4960
+ .db-session-log-body-split {
4961
+ flex: 1;
4962
+ display: flex;
4963
+ overflow: hidden;
4964
+ }
4965
+ .db-session-log-list-col {
4966
+ width: 360px;
4967
+ min-width: 260px;
4968
+ max-width: 500px;
4969
+ border-right: 1px solid var(--border);
4970
+ display: flex;
4971
+ flex-direction: column;
4972
+ overflow: hidden;
4973
+ }
4974
+ .db-session-log-detail-col {
4975
+ flex: 1;
4976
+ overflow-y: auto;
4977
+ padding: 12px;
4978
+ }
4979
+ .db-session-log-detail-placeholder,
4980
+ .db-session-log-empty {
4981
+ color: var(--fg-muted);
4982
+ text-align: center;
4983
+ padding: 40px 16px;
4984
+ font-size: 13px;
4985
+ }
4986
+ .db-session-log-detail-actions {
4987
+ display: flex;
4988
+ gap: 8px;
4989
+ margin-bottom: 12px;
4990
+ }
4991
+ .db-session-log-list {
4992
+ flex: 1;
4993
+ overflow-y: auto;
4994
+ }
4995
+ .db-session-log-entry {
4996
+ padding: 8px 12px;
4997
+ border-bottom: 1px solid var(--border);
4998
+ cursor: pointer;
4999
+ }
5000
+ .db-session-log-entry:hover {
5001
+ background: var(--bg-mute);
5002
+ }
5003
+ .db-session-log-entry.selected {
5004
+ background: color-mix(in srgb, var(--accent) 12%, var(--bg));
5005
+ border-left: 3px solid var(--accent);
5006
+ padding-left: 9px;
5007
+ }
5008
+ .db-session-log-entry-meta {
5009
+ display: flex;
5010
+ gap: 8px;
5011
+ align-items: center;
5012
+ font-size: 11px;
5013
+ color: var(--fg-muted);
5014
+ }
5015
+ .db-session-log-badge {
5016
+ font-weight: 600;
5017
+ font-size: 10px;
5018
+ padding: 1px 6px;
5019
+ border-radius: 999px;
5020
+ border: 1px solid transparent;
5021
+ }
5022
+ .db-session-log-badge-ok {
5023
+ background: rgba(46, 160, 67, 0.15);
5024
+ border-color: rgba(46, 160, 67, 0.4);
5025
+ color: var(--success, #2da44e);
5026
+ }
5027
+ .db-session-log-badge-error {
5028
+ background: rgba(207, 34, 46, 0.15);
5029
+ border-color: rgba(207, 34, 46, 0.4);
5030
+ color: var(--danger, #cf222e);
5031
+ }
5032
+ .db-session-log-kind {
5033
+ font-size: 10px;
5034
+ text-transform: uppercase;
5035
+ letter-spacing: 0.05em;
5036
+ color: var(--fg-subtle);
5037
+ }
5038
+ .db-session-log-time {
5039
+ font-size: 11px;
5040
+ }
5041
+ .db-session-log-stats {
5042
+ font-size: 11px;
5043
+ }
5044
+ .db-session-log-entry-title {
5045
+ margin-top: 4px;
5046
+ font-size: 12px;
5047
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
5048
+ white-space: nowrap;
5049
+ overflow: hidden;
5050
+ text-overflow: ellipsis;
5051
+ }
5052
+ .db-session-log-sql {
5053
+ padding: 8px;
5054
+ border-radius: 4px;
5055
+ background: var(--bg);
5056
+ border: 1px solid var(--border);
5057
+ font-size: 12px;
5058
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
5059
+ white-space: pre-wrap;
5060
+ word-break: break-word;
5061
+ margin-bottom: 8px;
5062
+ color: var(--fg);
5063
+ }
5064
+ /* shiki が `<span style="--shiki-light:#xxx;--shiki-dark:#yyy">` の inline
5065
+ CSS 変数で token ごとの色を出すので、light/dark 用にそれぞれ参照する。
5066
+ db-query-highlight と同じスキーム。 */
5067
+ .db-session-log-sql span[style] {
5068
+ color: var(--shiki-light);
5069
+ }
5070
+ @media (prefers-color-scheme: dark) {
5071
+ .db-session-log-sql span[style] {
5072
+ color: var(--shiki-dark);
5073
+ }
5074
+ }
5075
+ html[data-theme="dark"] .db-session-log-sql span[style] {
5076
+ color: var(--shiki-dark);
5077
+ }
5078
+ .db-session-log-message {
5079
+ padding: 8px;
5080
+ border-radius: 4px;
5081
+ font-size: 12px;
5082
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
5083
+ white-space: pre-wrap;
5084
+ word-break: break-word;
5085
+ }
5086
+ .db-session-log-message-error {
5087
+ background: rgba(207, 34, 46, 0.08);
5088
+ border: 1px solid rgba(207, 34, 46, 0.4);
5089
+ color: var(--danger, #cf222e);
5090
+ }
5091
+ .db-session-log-message-ok {
5092
+ background: var(--bg-soft);
5093
+ border: 1px solid var(--border);
5094
+ color: var(--fg-muted);
5095
+ }
4856
5096
  .db-query-history {
4857
5097
  height: 100%;
4858
5098
  display: flex;
@@ -5723,31 +5963,6 @@ body[data-sidebar-font-size="xlarge"] .db-container {
5723
5963
  border-color: var(--accent);
5724
5964
  font-weight: 600;
5725
5965
  }
5726
- .db-history-toggle {
5727
- display: flex;
5728
- align-items: center;
5729
- gap: 6px;
5730
- width: 100%;
5731
- padding: 8px 12px;
5732
- border: none;
5733
- border-top: 1px solid var(--border);
5734
- background: var(--bg-soft);
5735
- color: var(--fg-muted);
5736
- font-size: var(--db-font-base);
5737
- font-family: inherit;
5738
- cursor: pointer;
5739
- text-align: left;
5740
- flex-shrink: 0;
5741
- }
5742
- .db-history-toggle:hover {
5743
- background: var(--bg-mute);
5744
- color: var(--fg);
5745
- }
5746
- .db-history-toggle.active {
5747
- color: var(--accent);
5748
- font-weight: 600;
5749
- }
5750
-
5751
5966
  /* ---------- [hidden] 属性を効かせる ---------- */
5752
5967
  /* `.db-*` クラスの多くが `display: flex` を主張しており、ブラウザ標準の
5753
5968
  `[hidden] { display: none }` (specificity 0,1,0) と CSS specificity が
@@ -5755,7 +5970,7 @@ body[data-sidebar-font-size="xlarge"] .db-container {
5755
5970
  .db-tools-section[hidden],
5756
5971
  .db-tool-btn[hidden],
5757
5972
  .db-tab-bar[hidden],
5758
- .db-history-toggle[hidden],
5973
+ .db-history-dock[hidden],
5759
5974
  .db-history-pane[hidden],
5760
5975
  .db-history-resizer[hidden],
5761
5976
  .db-table-list[hidden],
@@ -6317,6 +6532,122 @@ body[data-sidebar-font-size="xlarge"] .db-container {
6317
6532
  flex-shrink: 0;
6318
6533
  }
6319
6534
 
6535
+ /* ---------- Row editing (edit / insert / delete) ---------- */
6536
+ .db-grid-edit-controls {
6537
+ display: flex;
6538
+ align-items: center;
6539
+ gap: 6px;
6540
+ flex-shrink: 0;
6541
+ }
6542
+ /* 編集モードがオンのトグルは accent で塗る (.controls > button.active と同系統)。 */
6543
+ .db-grid-edit-toggle.active {
6544
+ background: var(--accent);
6545
+ border-color: var(--accent);
6546
+ color: #fff;
6547
+ }
6548
+ .db-grid-edit-status {
6549
+ font-size: var(--db-font-sm);
6550
+ color: var(--fg-muted);
6551
+ white-space: nowrap;
6552
+ }
6553
+
6554
+ /* 編集セルは入力欄を全幅で内包する。 */
6555
+ .db-grid-cell-edit {
6556
+ padding: 0;
6557
+ position: relative;
6558
+ }
6559
+ /* 編集モードでも既定は read-only と同じ見た目の表示モード。
6560
+ ダブルクリックで input になることを薄い枠で示す。 */
6561
+ .db-grid-cell-edit.db-grid-cell-display {
6562
+ padding: 4px 8px;
6563
+ white-space: nowrap;
6564
+ overflow: hidden;
6565
+ text-overflow: ellipsis;
6566
+ }
6567
+ .db-grid-cell-edit.db-grid-cell-display:not(.readonly):hover {
6568
+ outline: 1px dashed var(--border);
6569
+ outline-offset: -2px;
6570
+ }
6571
+ .db-grid-cell-edit.db-grid-cell-display.readonly {
6572
+ color: var(--fg-subtle);
6573
+ background: rgba(128, 128, 128, 0.06);
6574
+ }
6575
+ /* NULL 状態の入力欄は placeholder "NULL" を斜体・淡色で示す。 */
6576
+ .db-grid-cell-input.is-null::placeholder {
6577
+ color: var(--fg-subtle);
6578
+ font-style: italic;
6579
+ opacity: 1;
6580
+ }
6581
+ /* セル右端の「NULL にする」ボタン。ホバー時のみ目立たせる。 */
6582
+ .db-grid-cell-null-btn {
6583
+ position: absolute;
6584
+ top: 50%;
6585
+ right: 2px;
6586
+ transform: translateY(-50%);
6587
+ border: none;
6588
+ background: transparent;
6589
+ color: var(--fg-subtle);
6590
+ cursor: pointer;
6591
+ font-size: 12px;
6592
+ line-height: 1;
6593
+ padding: 2px 4px;
6594
+ border-radius: 3px;
6595
+ }
6596
+ .db-grid-cell-null-btn:hover {
6597
+ color: var(--fg);
6598
+ background: var(--bg-soft);
6599
+ }
6600
+ .db-grid-cell-input {
6601
+ width: 100%;
6602
+ height: 100%;
6603
+ box-sizing: border-box;
6604
+ border: none;
6605
+ background: transparent;
6606
+ color: var(--fg);
6607
+ font: inherit;
6608
+ padding: 4px 8px;
6609
+ }
6610
+ .db-grid-cell-input:focus {
6611
+ outline: 2px solid var(--accent);
6612
+ outline-offset: -2px;
6613
+ background: var(--bg);
6614
+ }
6615
+ .db-grid-cell-input.readonly {
6616
+ color: var(--fg-subtle);
6617
+ background: rgba(128, 128, 128, 0.06);
6618
+ }
6619
+
6620
+ /* 削除マーク済みの行は取り消し線+赤系で示す。 */
6621
+ .db-grid-row-deleted {
6622
+ background: rgba(207, 34, 46, 0.08);
6623
+ text-decoration: line-through;
6624
+ opacity: 0.7;
6625
+ }
6626
+ /* 新規行ドラフトは accent 系で「未保存」を示す。 */
6627
+ .db-grid-row-draft {
6628
+ background: var(--accent-subtle);
6629
+ }
6630
+ /* 値を編集 (未コミット) した行は黄系の薄背景。delete マークが優先するため
6631
+ :not で除外。draft 行とも干渉しないよう個別 selector で十分。 */
6632
+ .db-grid-row-edited:not(.db-grid-row-deleted) {
6633
+ background: rgba(210, 153, 34, 0.10);
6634
+ }
6635
+ /* 編集したセル単体は同系のやや濃い背景 + 左端に縦バーで「ここを変更」と
6636
+ 示す。display モードと input モードの両方で適用する。 */
6637
+ .db-grid-cell-edited {
6638
+ background: rgba(210, 153, 34, 0.22);
6639
+ box-shadow: inset 2px 0 0 var(--attn);
6640
+ }
6641
+ .db-grid-rownum-deletable:hover {
6642
+ color: var(--danger);
6643
+ background: rgba(207, 34, 46, 0.12);
6644
+ }
6645
+ .db-grid-rownum-draft {
6646
+ color: var(--accent);
6647
+ font-weight: 600;
6648
+ text-align: center;
6649
+ }
6650
+
6320
6651
  /* ---------- Query Editor ---------- */
6321
6652
  .db-query-editor {
6322
6653
  flex: 1;
@@ -6528,6 +6859,17 @@ html[data-theme="dark"] .db-query-highlight span[style] {
6528
6859
  .db-schema-table tr.pk-row {
6529
6860
  background: var(--attention-subtle, #fff8c5);
6530
6861
  }
6862
+ /* ダークモードでは淡黄色だと白文字とのコントラストがきつく目が痛い。
6863
+ accent を低彩度の背景タイルとして敷く (db-tool-btn.active と同じ
6864
+ color-mix スキーム)。 */
6865
+ @media (prefers-color-scheme: dark) {
6866
+ .db-schema-table tr.pk-row {
6867
+ background: color-mix(in srgb, var(--accent) 18%, transparent);
6868
+ }
6869
+ }
6870
+ html[data-theme="dark"] .db-schema-table tr.pk-row {
6871
+ background: color-mix(in srgb, var(--accent) 18%, transparent);
6872
+ }
6531
6873
 
6532
6874
  .db-schema-col-name {
6533
6875
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
@@ -8075,6 +8417,58 @@ body.db-resizing {
8075
8417
  text-overflow: ellipsis;
8076
8418
  white-space: nowrap;
8077
8419
  }
8420
+ /* 値編集アクション (Edit / Delete) はヘッダ右端に寄せる。 */
8421
+ .redis-value-actions {
8422
+ margin-left: auto;
8423
+ display: flex;
8424
+ gap: 6px;
8425
+ flex-shrink: 0;
8426
+ }
8427
+ /* キーリストヘッダ: タイトル + 新規キーボタン。 */
8428
+ .redis-key-list-header {
8429
+ display: flex;
8430
+ align-items: center;
8431
+ justify-content: space-between;
8432
+ gap: 8px;
8433
+ }
8434
+ /* 値編集 / 新規キーフォーム。 */
8435
+ .redis-value-edit-bar {
8436
+ display: flex;
8437
+ align-items: center;
8438
+ gap: 6px;
8439
+ margin-bottom: 6px;
8440
+ }
8441
+ .redis-value-edit-status {
8442
+ font-size: var(--db-font-sm);
8443
+ color: var(--fg-muted);
8444
+ }
8445
+ .redis-value-edit-textarea,
8446
+ .redis-new-key-value {
8447
+ width: 100%;
8448
+ min-height: 160px;
8449
+ box-sizing: border-box;
8450
+ font-family: var(--mono, monospace);
8451
+ font-size: var(--db-font-mono);
8452
+ padding: 8px;
8453
+ border: 1px solid var(--border);
8454
+ border-radius: 4px;
8455
+ background: var(--bg);
8456
+ color: var(--fg);
8457
+ resize: vertical;
8458
+ }
8459
+ .redis-new-key-form {
8460
+ display: flex;
8461
+ flex-direction: column;
8462
+ gap: 8px;
8463
+ }
8464
+ .redis-new-key-name {
8465
+ padding: 6px 8px;
8466
+ border: 1px solid var(--border);
8467
+ border-radius: 4px;
8468
+ background: var(--bg);
8469
+ color: var(--fg);
8470
+ font-family: var(--mono, monospace);
8471
+ }
8078
8472
  .redis-value-body {
8079
8473
  flex: 1;
8080
8474
  overflow: auto;
@@ -8387,6 +8781,9 @@ body.db-resizing {
8387
8781
  }
8388
8782
  .es-mapping-header,
8389
8783
  .es-doc-detail-header {
8784
+ display: flex;
8785
+ align-items: center;
8786
+ gap: 8px;
8390
8787
  font-family: var(--mono, monospace);
8391
8788
  font-size: var(--db-font-mono);
8392
8789
  font-weight: 600;
@@ -8394,6 +8791,54 @@ body.db-resizing {
8394
8791
  border-bottom: 1px solid var(--border);
8395
8792
  margin-bottom: 8px;
8396
8793
  }
8794
+ .es-doc-actions {
8795
+ margin-left: auto;
8796
+ display: flex;
8797
+ gap: 6px;
8798
+ flex-shrink: 0;
8799
+ }
8800
+ .es-doc-list-header {
8801
+ display: flex;
8802
+ align-items: center;
8803
+ justify-content: space-between;
8804
+ gap: 8px;
8805
+ }
8806
+ .es-doc-edit-bar {
8807
+ display: flex;
8808
+ align-items: center;
8809
+ gap: 6px;
8810
+ margin-bottom: 6px;
8811
+ }
8812
+ .es-doc-edit-status {
8813
+ font-size: var(--db-font-sm);
8814
+ color: var(--fg-muted);
8815
+ }
8816
+ .es-doc-edit-textarea {
8817
+ width: 100%;
8818
+ min-height: 280px;
8819
+ box-sizing: border-box;
8820
+ font-family: var(--mono, monospace);
8821
+ font-size: var(--db-font-mono);
8822
+ padding: 8px;
8823
+ border: 1px solid var(--border);
8824
+ border-radius: 4px;
8825
+ background: var(--bg);
8826
+ color: var(--fg);
8827
+ resize: vertical;
8828
+ }
8829
+ .es-new-doc-form {
8830
+ display: flex;
8831
+ flex-direction: column;
8832
+ gap: 8px;
8833
+ }
8834
+ .es-new-doc-id {
8835
+ padding: 6px 8px;
8836
+ border: 1px solid var(--border);
8837
+ border-radius: 4px;
8838
+ background: var(--bg);
8839
+ color: var(--fg);
8840
+ font-family: var(--mono, monospace);
8841
+ }
8397
8842
  .es-doc-detail-meta {
8398
8843
  font-family: var(--mono, monospace);
8399
8844
  font-size: var(--db-font-sm);
@@ -8903,6 +9348,45 @@ body.db-resizing {
8903
9348
  display: flex;
8904
9349
  align-items: center;
8905
9350
  gap: 6px;
9351
+ flex-wrap: wrap;
9352
+ }
9353
+ /* オブジェクト編集 / 新規作成フォーム。 */
9354
+ .s3-edit-bar {
9355
+ display: flex;
9356
+ align-items: center;
9357
+ gap: 6px;
9358
+ margin-bottom: 6px;
9359
+ }
9360
+ .s3-edit-status {
9361
+ font-size: var(--db-font-sm);
9362
+ color: var(--fg-muted);
9363
+ }
9364
+ .s3-edit-textarea {
9365
+ width: 100%;
9366
+ min-height: 280px;
9367
+ box-sizing: border-box;
9368
+ font-family: var(--mono, monospace);
9369
+ font-size: var(--db-font-mono);
9370
+ padding: 8px;
9371
+ border: 1px solid var(--border);
9372
+ border-radius: 4px;
9373
+ background: var(--bg);
9374
+ color: var(--fg);
9375
+ resize: vertical;
9376
+ }
9377
+ .s3-new-object-form {
9378
+ display: flex;
9379
+ flex-direction: column;
9380
+ gap: 8px;
9381
+ padding: 12px;
9382
+ }
9383
+ .s3-new-object-key {
9384
+ padding: 6px 8px;
9385
+ border: 1px solid var(--border);
9386
+ border-radius: 4px;
9387
+ background: var(--bg);
9388
+ color: var(--fg);
9389
+ font-family: var(--mono, monospace);
8906
9390
  }
8907
9391
  .s3-preview-body {
8908
9392
  flex: 1;